Chapter 3__文件IO


无聊,贴些本章的关键字:
一、空洞文件、预读技术(read ahead)、缓冲
二、进程表->打开的文件描述符表->文件表
三、文件状态标志、文件偏移量、v与i节点表

四、多函数操作,都不可能是原子操作。

五、延迟写->减少物理IO->降低文件更新速度->数据丢失危险增大


关键函数:
open - close
read - write  (内核级无缓冲)
creat
lseek

pread - pwrite
dup、dup2

sync   不等待
fsync 等待
fdatasync  类fsync,但只影响文件数据,不影响文件属性

fcntl 改变句柄性质
ioctl 


系统命令:
od、dd


int fcntl(int filedes, int cmd, .../* int arg */);
int fcntl(int filedes, int cmd, .../* struct flock *flockptr */); //记录锁

fcntl函数有5种功能:
1)复制一个现有的描述符(cmd = F_DUPFD)
2)get/set文件描述符标记(cmd = F_GETFD / F_SETFD)
3)get/set文件状态标志(cmd = F_GETFL / F_SETFL)
4)get/set异步I/O所有权(cmd = F_GETOWN / F_SETOWN)
5)get/set记录锁(cmd = F_GETLK / F_SETLK / F_SETLKW)



#include <fcntl.h>
void set_fl(int fd, int flags);
void clr_fl(int fd, int flags);

void set_fl(int fd, int flags)  //  void clr_fl(int fd, int flags)
{
    int val;
    if ((val = fcntl(fd, F_GETFL, 0)) < 0)
        printf("fcntl F_GETFL error");

    val |= flags;
    //  val &= ~flags;   //

    if (fcntl(fd, F_SETFL, val) < 0)
        printf("fcntl F_SETFL error");
}


你可能感兴趣的:(apt)