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就是标准输入输出,前面的笔记中有