文章目录
- 文件描述符
- 偏移量
- 空洞
- 文件共享
- dup,dup2
- sync,fsync,fdatasync
文件描述符
内核返回给用户进程的文件的标识
偏移量
测试能否设置偏移
#include "apue.h"int
main(void)
{
if (lseek(STDIN_FILENO, 0, SEEK_CUR) == -1)printf("cannot seek\n");elseprintf("seek OK\n");exit(0);
}
./seek </etc/passwd
空洞
#include "apue.h"
#include <fcntl.h>char buf1[] = "abcdefghij";
char buf2[] = "ABCDEFGHIJ";int
main(void)
{
int fd;if ((fd = creat("file.hole", FILE_MODE)) < 0)err_sys("creat error");if (write(fd, buf1, 10) != 10)err_sys("buf1 write error");/* offset now = 10 */if (lseek(fd, 16384, SEEK_SET) == -1)err_sys("lseek error");/* offset now = 16384 */if (write(fd, buf2, 10) != 10)err_sys("buf2 write error");/* offset now = 16394 */exit(0);
}
文件共享
v节点可以共享。
一个文件只有一个v节点。
不同的进程可以有不同的文件表,可以记录不同的偏移。
多个进程可以指向同一个文件表。
dup,dup2
复制文件描述符。
sync,fsync,fdatasync
控制缓冲区和磁盘