linux:基础io(代码片段)

银背欧尼酱 银背欧尼酱     2022-12-20     720

关键词:


前言

本文将为大家介绍基础IO的相关知识,让我一起来学习吧。


一,复习C语言当中学习的文件接口操作

FILE *fopen(const char *path,const char *mode);
	path:待要打开的文件
	mode:以何种方式打开
		r:可读方式打开
		r+:可读可写方式打开
		w:可写方式打开
		w+:可读可写方式打开,如果文件不存在,则创建文件。如果是打开了一个已经存在的文件,则截断文件(清空文件内容)
		a:追加写,但是不可以读。如果文件不存在则创建文件,如果文件存在,则在文件的末尾开始追加写。
		a+:追加写,可以读。如果文件不存在则创建文件,如果文件存在,则在文件的末尾开始追加写。
		
		返回值:
			成功:返回文件流指针FILE
			失败,则返回NULL
			
size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);
	ptr:将从文件读到的内容保存在ptr指向的空间当中
	size:定义读文件时,一个块的大小,单位为字节
	nmemb:期望可以从文件中读多少块
	stream:文件流指针
		返回值:
			返回的是真正读取到块的个数
			常见用法:将一块的大小定义为1字节,nmemeb就可以代表我们期望读多少字节,返回的含义,也是读到了多少字节。
			
size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);
	ptr:想往文件中写什么内容
	size:定义往文件中写的块的大小,单位为字节
	nmemb:期望写多少块
	stream:文件流指针
		返回值:
			返回成功:写入到文件当中块的个数
			常见用法:将一块的大小定义为1字节,nmemeb就可以代表我们想写多少字节,返回值为成功写入的字节数量

int fseek(FILE *stream,long offset,int whence);
	stream:文件流指针
	offset:偏移量
	whence:将文件流指针偏移到什么位置
		SEEK_SET:定义文件流指针到文件头部
		SEEK_CUR:定义文件流指针到当前位置
		SEEK_END:定义文件流指针到文件末尾
	作用:移动文件流指针指向的位置
	
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
系统调用的文件操作接口:
打开的文件存在,则使用下面的接口
int open(const char *pathname,int flags,mode_t mode);
	pathname:待要打开的文件
	flags:以何种方式打开,有且只能存在一种,并且必须有
        0_RDONLY:只读方式
        0_WRONLY:只写方式
        0_RDWR:读写方式
	可选项:
        0_TRUNC:截断文件(清空文件内容)
        0_CREAT:文件不存在则创建文件
        0_APPEND:追加的方式
        0_EXCL | 0_CREAT : 如果文件存在,则打开文件失败
     使用按位或的方式进行组合
     0_RDWR | 0_CREAT | 0_APPEND
     本质上内核是使用位图的方式来表示每一种方式的
     mode:当创建或打开一个新文件时,则需要给文件设置权限,设置权限的时候,则传递一个8进制的数字就可以了
   返回值:
   		成功:返回一个文件描述符
   		失败:返回-1

ssize_t read(int fd,void *buf,size_t count);
	fd:文件描述符
	buf:将文件内容读到buf指向的空间当中
	count:期望读多少字节
  返回值:
  	返回读到的字节数量
  	
ssize_t write(int fd,const void *buf,size_t count);
	fd:文件描述符
	buf:将buf指向的内容写到文件中去
	count:期望写多少字节
  返回值:
  	返回写入的字节数量
  	
off_t lseek(int fd,off_t offset,int whence);
	fd:文件描述符
	offset:偏移量
	whence:
		SEEK_SET:定义文件流指针到文件头部
		SEEK_CUR:定义文件流指针到当前位置
		SEEK_END:定义文件流指针到文件末尾

二,文件描述符

文件描述符本质上就是一个整数,是一个从0开始的整数。当我们打开文件时,操作系统在内存中要创建相应的数据结构来描述目标文件,于是就有了file结构体,表示一个已经打开的文件对象。而进程执行open系统调用,所以必须让进程和文件关联起来。每一个进程都有一个指针*files,指向一张表files_struct,该表最重要的部分就是包涵一个指针数组,每个元素都是一个指向打开文件的指针。所以,本质上,文件描述符就是files_struct包含数组的下标。所以只要拿着文件描述符,就能找到对应的文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UhG2jUVA-1628669830113)(https://i.loli.net/2021/08/11/1EstfVcWAJFpYjN.png)]

默认的三个文件描述符:标准输入0,标准输出1,标准错误2。一个文件流指针只能保存一个文件描述符。

三,静态库和动态库

静态库和动态库都是程序代码的集合,将代码集合封装在了库文件当中,提供给调用者使用:

动态库:

​ 特征:

​ win : 后缀为 .dll

​ linux : 前缀 : lib 后缀为: .so

​ 生成:

​ 使用gcc/g++编译命令,需要用到两个命令行参数

​ —fPIC : 产生位置无关的代码

​ —shared : 产生共享库

使用:

​ gcc/g++的命令行参数:

​ -L [path] : 指定当前链接库文件所在路径

​ -l[库文件名称(去掉前缀,去掉后缀的名称)]:链接某个库文件

动态库的环境变量:

​ LD_LIBRARY_PATH

都有哪些方式可以使自己的可执行程序找到自己依赖的动态库

​ 1.将动态库放到可执行程序的路径下

​ 2.配置LD_LIBRARY_PATH环境变量(临时)

​ 3.放到系统库的路径下,/lib64 :对系统环境变量进行操作,极其不推荐

静态库:

​ 特征:

​ win : 后缀为 .lib

​ linux : 前缀 : lib 后缀为: .a

​ 生成:

​ 注意点:使用目标程序进程编译生成

​ 第一段:使用gcc/g++将源代码编译成为目标文件(.o文件)

​ 第二段:使用ar -rc命令编译目标文件生成静态库

总结

以上就是本文内容,希望对大家有所帮助。

linux入门基础io(代码片段)

基础IO✔回顾C文件的接口✔系统文件I/O✔文件描述符文件描述符的分配规则重定向✔FILE缓冲区fclose和close✔dup2系统调用✔理解文件系统inode硬链接软链接文件的三个时间✔回顾C文件的接口在学习C语言时我们了解了一些C语言的对... 查看详情

linux入门基础io(代码片段)

基础IO✔回顾C文件的接口✔系统文件I/O✔文件描述符文件描述符的分配规则重定向✔FILE缓冲区fclose和close✔dup2系统调用✔理解文件系统inode硬链接软链接文件的三个时间✔回顾C文件的接口在学习C语言时我们了解了一些C语言的对... 查看详情

linux下的基础io(代码片段)

目录一.C语言文件IO操作(库函数)1.打开文件fopen 2.写入二进制文件fwrite和读取二进制文件fread3.关闭文件fclose 二.系统文件IO(系统调用接口)1.打开文件open系统调用2.读文件read和写文件write3.关闭文件close  三.文件描述符1.系统管理... 查看详情

linux:基础io(代码片段)

...述符三,静态库和动态库总结前言本文将为大家介绍基础IO的相关知识,让我一起来学习吧。一,复习C语言当中学习的文件接口操作FILE*fopen(constchar*path,constchar*mode); path:待要打开的文件 mode:以何种方式打开 r:可读方... 查看详情

linux:基础io(代码片段)

...述符三,静态库和动态库总结前言本文将为大家介绍基础IO的相关知识,让我一起来学习吧。一,复习C语言当中学习的文件接口操作FILE*fopen(constchar*path,constchar*mode); path:待要打开的文件 mode:以何种方式打开 r:可读方... 查看详情

linux基础io(代码片段)

文章目录一.C文件IO相关操作二.系统文件IOopen函数返回值重定向使用dup2系统调用给简易shell中增加重定向功能理解文件系统理解软硬链接三.动态库和静态库制作动静态库一.C文件IO相关操作只有文件名但不带路径的话,默认在... 查看详情

linux基础io(代码片段)

文章目录一.C文件IO相关操作二.系统文件IOopen函数返回值重定向使用dup2系统调用给简易shell中增加重定向功能理解文件系统理解软硬链接三.动态库和静态库制作动静态库一.C文件IO相关操作只有文件名但不带路径的话,默认在... 查看详情

linux基础io(代码片段)

目录系统文件IOopenwritereadclose文件描述符fdFILE重定向使用dup2系统调用文件系统磁盘磁盘和内存交互磁盘的分区与格式化Ext2文件系统的存储方案inode软硬链接软连接硬链接文件的三个时间系统文件IOopenopen接口的作用是打开文件。... 查看详情

linux基础io(代码片段)

目录系统文件IOopenwritereadclose文件描述符fdFILE重定向使用dup2系统调用文件系统磁盘磁盘和内存交互磁盘的分区与格式化Ext2文件系统的存储方案inode软硬链接软连接硬链接文件的三个时间系统文件IOopenopen接口的作用是打开文件。... 查看详情

linux基础io(代码片段)

文章目录C语言文件IOC语言文件接口汇总什么是当前路径?默认打开的三个流系统文件I/Oopenopen的第一个参数open的第二个参数open的第三个参数open的返回值closewriteread文件描述符fd文件描述符的分配规则重定向重定向的原理dup2... 查看详情

13linux下的基础io(代码片段)

不同操作系统所暴露出的接口是不同的,因此Linux下的一些系统调用接口是无法移植到Windows下的。文章目录一、C语言中的文件接口二、系统文件I/O2.1.系统调用接口open2.2.文件描述符fd(filedescriptor)2.3.补充内容--函数... 查看详情

5.linux基础io(代码片段)

目录open系统调用和库函数重定向文件管理、理解文件系统静态库动态库怎么打包文件 =内容+属性FILE*,c语言,软件如何理解硬件和软件的关系stdin,标准输入,键盘stdout,标准输出,显示器stderr,标准错误... 查看详情

linux练习生基础io(详细)(代码片段)

本节我们讲解基础IO的部分,将围绕以下内容进行梳理讲解:复习C文件IO相关操作认识文件相关系统调用接口认识文件描述符,理解重定向对比fd和FILE,理解系统调用和库函数的关系理解文件系统中inode的概念认识软硬... 查看详情

《linux从0到99》九基础io(代码片段)

基础IO1.回顾c语言文件操作接口2.系统调用文件操作系统01open函数02read函数03write函数04lseek函数05close函数3.文件描述符0&1&2文件描述符的分配规则(最小未分配原则)4.文件描述符与文件流指针的区别01文件流指针的本... 查看详情

万字详解linux系列基础io(代码片段)

文章目录前言(1)当前目录(2)stdin、stdout、stderr一、open(1)标志位(2)O_WRONLY(3)O_CREAT二、close,read,write三、文件描述符1.概念2.原理3.分配规则四、重定向1.输出 查看详情

万字详解linux系列基础io(代码片段)

文章目录前言(1)当前目录(2)stdin、stdout、stderr一、open(1)标志位(2)O_WRONLY(3)O_CREAT二、close,read,write三、文件描述符1.概念2.原理3.分配规则四、重定向1.输出 查看详情

linux文件系统与基础io(代码片段)

文件的宏观理解1⃣️文件在哪里呢?“狭义”上在磁盘,“广义”上一切皆文件。主要研究“狭义”,磁盘为外设,那么对文件的所有操作,本质都是对外设的输入输出,简称IO2⃣️文件是什么?空文... 查看详情

linux篇第九篇——基础io(系统文件io+文件描述符+重定向+文件系统+软硬链接)(代码片段)

⭐️这篇博客就要开始聊一聊Linux中基础IO相关知识,IO相信大家都不陌生,我们在C/C++中对文件进行读写的操作,也就是文件IO,这篇博客我也会带大家回顾一下。这篇博客还会介绍系统中的文件IO调用的接... 查看详情