系统IO
系统文件IO函数
open()
函数的作用:用于打开文件(pathname),对文件各种操作。
//函数原型,两个原型
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
//需要的头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
- 函数参数
| 参数 | 描述 |
|---|---|
pathname |
文件的路径和文件的名字 |
flags |
文件的权限 |
mode |
文件的属性(第二个函数)仅当flags选择创建时有效 |
flags的选项太多,下面列出选项的作用
| 选项 | 描述 |
|---|---|
O_RDONLY |
以只读的方式打开文件,光标在头部 |
O_WRONLY |
以只写的方式打开文件,光标在头部。如果文件内有其他的数据,会清除,重新在头部输出。 |
O_RDWR |
以可读可写的方式打开文件,如果有数据,光标会在后面追加,如没有这个文件会创建 |
| 下面的宏可以与上面的按位或 | |
O_APPEND |
在文件尾部追加追加,光标会在文件的末尾 |
O_CREAT |
在文件不存在的情况下会创建文件(一般用于三个参数的open) |
-
储着被打开文件的数据。接收这个返回值可以对知道这个文件的信息。
-
返回值
int
这个顺序表,每一个返回值都对应着一个下标,都存储着被打开文件的数据。接收这个返回值可以对知道这个文件的信息。
每当文件运行时,系统会首先打开stdio stdout stderr这三个文件。
read()
函数的作用:读取文件的信息,光标会跟随移动。
//函数原型,两个原型
ssize_t read(int fd, void *buf, size_t count);
//需要的头文件
#include <unistd.h>
- 函数参数
| 参数 | 描述 |
|---|---|
fd |
被打开文件的描述符 |
buf |
读取的数据存放的位置 |
count |
读取数据的字节大小 |
- 返回值
ssize_t
返回实际读取数据的字节大小,出错返回-1
write()
函数的作用:写入信息到文件,光标会跟随移动。
//函数原型,两个原型
ssize_t write(int fd, const void *buf, size_t count);
//需要的头文件
#include <unistd.h>
- 函数参数
| 参数 | 描述 |
|---|---|
fd |
被打开文件的描述符 |
buf |
把这个缓冲区的数据写入进文件中 |
count |
写入数据的字节大小 |
- 返回值
ssize_t
返回实际写入数据的字节大小,出错返回-1
write()
函数的作用:关闭文件
//函数原型,两个原型
int close(int fd);
//需要的头文件
#include <unistd.h>
- 函数参数
| 参数 | 描述 |
|---|---|
fd |
被打开文件的描述符 |
- 返回值
int
关闭成功返回0,关闭失败返回-1
lseek()
函数的作用:关闭文件
//函数原型,两个原型
off_t lseek(int fd, off_t offset, int whence);
//需要的头文件
#include <sys/types.h>
#include <unistd.h>
- 函数参数
| 参数 | 描述 |
|---|---|
fd |
被打开文件的描述符 |
offset |
偏移量,可正(向右偏移)、可负(向左偏移) |
whence |
将光标偏移到那个位置,再加上偏移量 |
whence的参数
| 选项 | 描述 |
|---|---|
SEEK_SET |
将光标设置在文件开头 |
SEEK_CUR |
将光标设置在文件当前 |
SEEK_END |
将光标设置在文件结尾 |
- 返回值
off_t
返回文件开头到光标内的字节大小
-
注意标准IO的函数和系统IO是有区别的
-
标准IO函数有两个缓冲区(标准IO缓冲区和内核缓冲区)的系统IO只会有一个缓冲区(内核缓冲区)。
-
open函数的区别在标准IO中使用的是fopen返回的是结构体,并且文件信息是通过链表存储的(文件信息是堆内存),关闭文件只能关闭一次系统IO使用的是
open返回的是整形,并且存储是使用顺序表,返回的是顺序表的下标,可以多次关闭,只有第一次关闭有效

浙公网安备 33010602011771号