open read write

本文深入讲解了Linux系统下文件操作的三个核心函数:open、read和write。详细解释了open函数如何通过不同的标志和模式创建或打开文件,read函数如何从文件描述符读取数据到缓冲区,以及write函数如何将数据从缓冲区写入文件描述符。同时,提供了具体的权限模式和错误代码说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Open read write函数

参考https://blog.csdn.net/ly52352148/article/details/52873819

 

1.open()函数

头文件#include <sys/types.h>    #include <sys/stat.h>    #include <fcntl.h>

 

定义函数:

int open(const char * pathname, int flags);

int open(const char * pathname, int flags, mode_t mode);

 

函数说明:

 

 

参数mode 则有下列数种组合, 只有在建立新文件时(O_CREAT)才会生效, 此外真正建文件时的权限会受到umask 值所影响, 因此该文件权限应该为 (mode-umaks).

S_IRWXU00700 权限, 代表该文件所有者具有可读、可写及可执行的权限.

S_IRUSR 或S_IREAD, 00400 权限, 代表该文件所有者具有可读取的权限.

S_IWUSR 或S_IWRITE, 00200 权限, 代表该文件所有者具有可写入的权限.

S_IXUSR 或S_IEXEC, 00100 权限, 代表该文件所有者具有可执行的权限.

S_IRWXG 00070 权限, 代表该文件用户组具有可读、可写及可执行的权限.

S_IRGRP 00040 权限, 代表该文件用户组具有可读的权限.

S_IWGRP 00020 权限, 代表该文件用户组具有可写入的权限.

S_IXGRP 00010 权限, 代表该文件用户组具有可执行的权限.

S_IRWXO 00007 权限, 代表其他用户具有可读、可写及可执行的权限.

S_IROTH 00004 权限, 代表其他用户具有可读的权限

S_IWOTH 00002 权限, 代表其他用户具有可写入的权限.

S_IXOTH 00001 权限, 代表其他用户具有可执行的权限.

 

返回值:若所有欲核查的权限都通过了检查则返回0值, 表示成功, 只要有一个权限被禁止则返回-1.

 

 

 

 

2.read()函数

 

定义函数:ssize_t read(int fd, void * buf, size_t count);

 

头文件:#include <unistd.h>

 

返回值:(1)如果成功,返回读取的字节数;

(2)如果出错,返回-1并设置errno;

(3)如果在调read函数之前已是文件末尾,则返回0。

 

参数说明:

    fd表示文件指针,void *buff表示读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移,count是请求读取的字节数。若参数count 为0, 则read()不会有作用并返回0.

 

 

 

3.write()函数

 

定义函数:ssize_t write (int fd, const void * buf, size_t count);

 

函数说明:write()会把参数buf 所指的内存写入count个字节到参数fd所指的文件内. 当然,文件读写位置也会随之移动.

 

返回值:

(1)如果顺利write()会返回实际写入的字节数.

(2)当有错误发生时则返回-1, 错误代码存入errno 中.

 

错误代码:

EINTR 此调用被信号所中断.

EAGAIN 当使用不可阻断I/O 时 (O_NONBLOCK), 若无数据可读取则返回此值.

EADF 参数fd 非有效的文件描述词, 或该文件已关闭.

 

4.简单例子

使用read()和write()完成标准输入输出

 

 

0和1就是标准输入输出,前面的笔记中有

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值