二:C标准库文件I/O函数

1open函数:

#include <unistd.h>

int open(char *pathname, int flags)

参数:

pathname: 欲打开的文件路径名

flags:文件打开方式:

#include <fcntl.h> 

O_RDONLY|O_WRONLY|O_RDWR

O_CREAT|O_APPEND|O_TRUNC|O_EXCL|O_NONBLOCK ....

返回值

成功: 打开文件所得到对应的 文件描述符(整数)

失败: -1, 设置errno

int open(char *pathname, int flagsmode_t mode) 123  775

参数:

pathname: 欲打开的文件路径名

flags:文件打开方式:

O_RDONLY|O_WRONLY|O_RDWR  O_CREAT|O_APPEND|O_TRUNC|O_EXCL|O_NONBLOCK ....

mode: 参数3使用的前提, 参2指定了O_CREAT 取值8进制数,用来描述文件的 访问权限。 rwx  0664 

创建文件最终权限 = mode & ~umask

返回值:

成功: 打开文件所得到对应的 文件描述符(整数)

失败: -1, 设置errno

2close函数:

strerror, strerror_r - return string describing error number

3错误处理函数:与 errno 相关。

printf("xxx error: %d ", errno);

char *strerror(int errnum);

printf("xxx error: %s ", strerror(errno));

void perror(const char *s);

   perror("open error");

4read函数:

ssize_t read(int fd, void *buf, size_t count);

参数:

fd:文件描述符

buf:存数据的缓冲区

count:缓冲区大小

返回值:

0:读到文件末尾。

成功; > 0 读到的字节数。

失败: -1, 设置 errno

-1: 并且 errno = EAGIN EWOULDBLOCK, 说明不是read失败,而是read在以非阻塞方式读一个设备文件(网络文件),并且文件无数据。

5write函数:

ssize_t write(int fd, const void *buf, size_t count);

参数:

fd:文件描述符

buf:待写出数据的缓冲区

count:数据大小

   返回值:

成功; 写入的字节数。

失败: -1, 设置 errno

6)预读入缓输出

 

用户空间-》内核空间进行反复切换读写数据,系统调用没有设置缓冲区,用户空间调用fread()函数一般有用户缓冲区的默认为4096.

原文地址:https://www.cnblogs.com/love-life-insist/p/14110723.html