在Linux系统中有这样一句“万物皆文件”,对于系统调用,我们对于文件IO需要学习的主要有open()、read()、write()、close()。我们平时使用的库函数其实都是通过系统调用进行封装成各种功能的函数。
1、open()
open(const char *path, int oflag, mode)
path: 要打开的文件、设备的路径
oflag: (1)必选:O_RDONLY(只读)、O_WRONLY(只写)、O_RDWR(读写)
(2)可选:O_APPEND 末尾写入
O_CREAT 文件不存在则创建它,使用该选项需要添加第三个参数;
O_TRUNC 如果文件存在,而且为只写或读写成功打开,则将其长度截取为0;相当于清空文件夹。
(3)mode:这个是指文件的权限,对应所有者、group、other的权限,对于普通文件一般为读写即可。
fd = open(“test.txt”, O_RDWR | O_CREAT | O_TRUNC ,0666)
fd = open(“test.txt”, O_RDWR | O_TRUNC )
(4)fd为文件描述符,相当于操作该文件对象的一个编号。
2、write()
write(int fd, const void *buf, size_t nbytes);
(1)fd:写入数据的文件对象
(2)buf:将buf中的数据写入文件中。
(3)nbytes:指定要写入数据的大小,一般和读取的字符大小一致。
3、read()
read(int fd, const void *buf, size_t nbytes);
(1)fd:读出数据的文件对象
(2)buf:将数据读入到buf中。
(3)nbytes:指定要读取数据的大小,一般和buf大小的一致。
4、close()
int close(int fd);
该函数用来关闭一个打开的文件描述符,关闭一个文件时还会释放该进程加在该文件上的所有记录锁。当一个进程终止时,内核将会自动关闭它所有打开的文件。
5、lseek()
lseek(int fd, off_t offset, int whence);
通过lseek()这个函数我们可以调整文件偏移量的地址。
因为在我们打开一个文件进行写入数据时,光标是跑到最后一个字符的后面的,如果这时候对文件的信息进行读取,那么它就会从光标处开始读取,这样光标后面是没有数据可读的,最后读取的数据为0,所以我们要进行文件偏移量设置。
当然,对于未初始的buf,我们也应该使用memset()进行清空数组空间。
SEEK_SET 文件头
SEEK_CUR 当前位置
SEEK_END 文件尾
lseek(fd,0,SEEK_SET);将文件偏移量设置到了文件开始的第一个字节上;
lseek(fd,0,SEEK_END);将文件偏移量设置到文件最后一个字节上;
lseek(fd,-1,SEEK_END);将文件偏移量设置到文件最后的倒数第一个字节上。
文件:
在 Linux 中,文件总共被分成了 7 种,他们分别是:
1,普通文件 (regular) :存在于外部存储器中,用于存储普通数据。
2, 目录文件 (directory) :用于存放目录项,是文件系统管理的重要文件类型。 3,管道文件 (pipe) :一种用于进程间通信的特殊文件,也称为命名管道 FIFO。 4,套接字文件 (socket) :一种用于网络间通信的特殊文件。
5,链接文件 (link) :用于间接访问另外一个目标文件,相当于 Windows 快捷方式。 6,字符设备文件 (character) :字符设备在应用层的访问接口。
7,块设备文件 (block) &