底层系统调用(open、write、read、close)

底层系统调用

open系统调用

​ open可以创建一个新的描述符,成功返回文件描述符,失败返回-1,通常open系统调用不需要头文件sys/stat.hsys/types.h但在某些UNIX系统上,它们必不可少,如果两个程序同时打开一个文件,它们会分别得到两个不同的文件描述符。如果它们都对文件进行写操作,那么它们会各写各的,分别接着上次离开的位置继续往下写。数据不会交织,而是彼此覆盖。两个程序对文件读写位置(偏移值)不同。可以通过使用文件锁防止这种现象出现。

​ O_RDONLY 只读打开

​ O_WRONLY 只写打开

​ O_RDWR 读、写打开

​ O_APPEND:把写入数据追加在文件末尾;

​ O_TRUNC:把文件长度设置为0,丢弃已写内容;

​ O_CREAT:如果需要,就按参数mode中给出的访问模式创建文件;

​ O_EXCL:与O_CREAT一起使用,确保调用者创建出文件。Open调用是一个原子操作,也就是说,它只执行一个函数调用。使用这个可选模式可防止两个程序同时创建一个文件。

​ S_IR(orW\X)USR 创建者权限

​ S_IR(orW\X)GRP用户组权限

​ S_IR(orW\X)OTH其他人权限

#include"fcntl.h"
#include"sys/types.h"
#include"sys/stat.h"

int open(const char *path ,int oflag);		//path是文件路径,oflag通过必需文件访问模式和其他可选模式相结合的方式来指定
int open(const char *path ,int oflag,mode_t mode);	//mode参数在头文件"sys/stat.h"中定义用于和O_CREAT联合使用创建文件

文件描述符" 0 & 1 & 2 " 及 " 分配规则 "

Linux 进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入 0, 标准输出 1, 标准错误 2
对应的物理设备一般是:
标准输入 0 —> 键盘 stdin
标准输出 1 —> 显示器 stdout
标准错误 2 —> 显示器 stderr

文件描述符的分配原则是从未分配的最小的描述符开始分配

write系统调用

​ 系统调用write的作用是把缓冲区的buf的前nbytes个字节写入文件描述符关联的文件中,它返回实际写入的字节数。如果文件描述符有误或者设备驱动程序对数据块长度比较敏感,该返回值可能会小于nbytes。函数为0,就表示未写入任何数据;如果它返回的是-1,就表示在write调用中出现了错误;错误代码保存在全局变量errno中;

#include"unistd.h"

size_t write(int fildes,const void * buf ,size_t nbytes)

read系统调用

​ read的作用是:从与文件描述符fildes相关联的文件里读入nbytes个字节的数据,并把它们放到数据区buf中。它返回实际读入的字节数,这可能会小于请求的字节数。返回-1表示调用出现错误。

#include"unistd.h"

size_t read(int fildes,const void * buf ,size_t nbytes)

close系统调用

​ close调用用于终止文件描述符fildes与其对应文件之间的关联,文件描述符释放可以重新使用,检查close调用的返回结果十分重要,有的文件系统,特别是网络文件系统,可能不会在关闭文件前报告写操作出现的错误,这是因为在执行写操作数字未被确认写入。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值