一般来说,文件I/O的系统调用分为:open(), read(), write(),close()。这篇博客就在讨论下这四个基本系统调用的使用。
需要的头文件:
|
|
open()
open() 系统调用用来打开一个文件,其既能打开一个已有文件又能创建并打开一个新文件。
其的语法如下:
|
|
这里的参数中 char *pathname 是文件名,int flags 是位掩码,用于指定文件的访问模式。常见的有以下几种:
| 位掩码 | 描述 |
|---|---|
O_RDONLY |
以只读方式打开文件 |
O_WRONLY |
以只写方式打开文件 |
O_RDWR |
以读写方式打开文件 |
O_CREAT |
若文件不存在则创建 |
open()会返回一个文件描述符,通常用 int fd 存储。
int fd 返回的文件描述符是进程未使用的文件描述符的正整数最小值,一般从 3 开始,因为 0、1、2都已经被占用了。
如果打开文件发生错误,open()会返回-1,错误号errno标识错误原因
read()
read() 系统调用用来读取从文件描述符中所打开文件的数据
其语法如下:
|
|
函数的参数中 int fd 是文件描述符。void buf 提供内存地址,也就是个指针,比如可以用&c。size_t count 指定最多能读取的字节数。
需要 count 大概是因为防止内存溢出吧,buf 至少需要 count 个字节。
如果 open() 调用成功就会返回读取的字节数,如果遇到文件结束就返回 0,而错误返回 -1 。
下面是一个例子:
|
|
write()
write()系统调用将数据写入一个已打开的文件
其的语法为:
|
|
write()的参数和 open()很类似,其中的 int fd 是文件描述符,const void buf 是要写入数据的内存地址,size_t count 是要写入文件的数据字节。
其的返回也和 open()类似,如果调用成功返回写入的字节数。
close()
close() 系统调用用来关闭一个