当前位置: 代码迷 >> 综合 >> 第三章.文件IO|文件描述符 偏移量 空洞 文件共享 dup,dup2 sync,fsync,fdatasync
  详细解决方案

第三章.文件IO|文件描述符 偏移量 空洞 文件共享 dup,dup2 sync,fsync,fdatasync

热度:10   发布时间:2024-02-23 22:55:46.0

文章目录

  • 文件描述符
  • 偏移量
  • 空洞
  • 文件共享
  • 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

控制缓冲区和磁盘

  相关解决方案