Linux文件操作

  1. 系统调用
    系统调用是指操作系统提供给用户的一组“特殊”接口,用户服务可以通过这组“特殊”接口获得操作系统内核提供的服务接口其实就是指函数,用户通过函数来使用内核提供的服务)
    注意:用户不能直接访问内核提供的服务是为了保障安全

  2. Linux里一切皆文件,对目录,设备的操作实质是对文件的操作,linux文件可分为:普通文件,目录文件,链接文件,设备文件,对文件操作可以分成系统函数和c库函数两种。

  3. 不带缓存的系统调用(操作文件)
    (1)在linux中打开或者创建一个新文件时,内核就会向进程返回一个文件描述符fd(一个非负的整数),当需要读写文件时,就是通过文件描述符作为参数传递给相应的参数,一个进程启动时,都会打开3个文件:标准输入0,标准输出1,标准出错处理2。只在linux操作系统中可编译使用系统函数时用man手册,man 1来查看系统命令,man 2来查看系统函数,man 3来查看库函数。

(2)创建文件
int creat(文件名(包含路径,缺省为当前路径),创建模式
常见创建模式:
S_IRUSR(可读)
S_IWUSR(可写)
S_IXUSR(可执行)
S_IXRWU(可读、可写、可执行)(00700)
除了以上的宏来选择创建模式,也可以用数字来表示
在这里插入图片描述

(3)打开文件
int open(文件名,flags):打开已存在文件
int open(文件名,flags,创建模式):创建文件并打开
flags:
O_RDONLY:只读打开
O_WRONL:只写打开
O_RDWR:读写打开
O_CREAT:没有文件就创建
O_EXCL:没有文件才能创建

(4)关闭文件:close(fd)

(5)读写文件
int read(fd,buf,length):参数意思:从哪读、读到哪里去、读多长
返回值为实际读取的字节数
int write(fd,buf,length):参数意思:写到哪、从哪写、写多长
返回值为实际写入的字节数

(6)定位文件
int lseek(fd,offset,whence):返回文件指针距离文件开头的位置
whence:
SEEK_SET:相对文件开头
SEEK_CUR:相对文件读写指针的当前位置
SEEK_END:相对文件末尾
offset可取负值,表示向前移动

应用1:实现文件的读写
在这里插入图片描述
应用2:用lseek来计算文件长度
在这里插入图片描述
应用3:用系统函数实现拷贝功能
在这里插入图片描述
在这里插入图片描述
4. 带缓存的标准库函数
(1)c库函数的文件操作独立于具体的操作系统平台,不带缓存的I/O是对文件描述符操作,带缓存是针对流,标准库代替用户处理:缓存分配,以优化长度执行I/o,缓存的根本目的是减少调用read和write的次数缓存分全缓存,行缓存,无缓存三种

(2)打开文件
FILE *fopen(文件名,打开模式)
在这里插入图片描述
b用于区分二进制文件和文本文件,但是Linux中不区分二进制文件和文本文件

(3)关闭文件:fclose(fp)

(4)数据块读写函数:fread和fwrite
fread(buf,size,length,fp)返回值是实际读取的数目
fwrite(buf,size,length,fp)返回值是实际写入的数目
在这里插入图片描述
(5)字符读写函数:fgetc和fputc
fputc(参数c,fp)返回值:成功写入的字符
fgetc(fp) 返回值:读取到的字符
在这里插入图片描述
(6**)字符串读写函数:fgets和fputs**
fputs(参数s,fp)返回值:写入的字符个数
fgets(参数
s,size,fp):返回值:s指针
在这里插入图片描述
(7)指针位置:ftell(fp)

(8)检查文件流是否读到了文件末尾:feof(fp)返回非零值代表到达末尾

(8)格式化读写函数:fscanf和fprintf
fscanf(字符串输入)返回值:参数数目
fprintf(输出数据到文件)返回值:实际输出的字符数

应用1:用库函数实现拷贝功能
在这里插入图片描述
在这里插入图片描述

注意:不管是利用read和write还是fread和fwrite都只是简单的把一个文件中的内容拷贝到另一个文件中,没有换行,假设我要把链表中的每个数据域的内容读出来在重新写进去,显然要利用fprintf(能输出换行符)和fscanf(能一行一行的读取)
在这里插入图片描述
输出结果:
qwer
asdf

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值