void sync(void)
s y n c
只是将所有修改过的块的缓存排入写队列,然后就返回,它并不等待实际
I / O
操作结束。系统精灵进程
(
通常称为
u p d a t e )
一般每隔
3 0
秒调用一次
s y n c
函数。这就保证了定期刷新内核的块缓存。注意该函数没有返回值,因为它总是被调用成功。
int fsync(int fd)
f s y n c
只引用单个文件
(
由文件描述符
f i l e d e s
指定
)
,它等待
I / O
结束(与
sync
不同),然后返回。
f s y n c
可用于数据库这样的应用程序,它确保修改过的块立即写到磁盘上。比较一下
f s y n c
和
O _ S Y N C
标志。当调用
f s y n c
时,它更新文件的内容,而对于
O _ S Y N C
,则每次对文件调用
w r i t e
函数时就更新文件的内容。
int access
(
const char *path, int mode
)
检查调用进程是否可以对指定的文件执行某种操作,执行成功返回
0
否则为
-1. mode
可以是:
R_OK
(读文件)
W_OK
(写文件)
, X_OK
(执行文件)
, F_OK
(文件存在)
ssize_t pwrite(int fd,const void *buf,size_t count,off_t offset)
ssize_t pread(int fd,void *buf,size_t count,off_t offset)
同
write
和
read
基本相同,不同是
pwrite
和
pread
都是原子操作(如果文件在打开时设置了
O_APPEND
标记,对
write
也是原子操作)
;
第四个参数
offset
是指相对于文件开始位置的偏移量,应该主意的是调用
pwrite/pread
后
fd
所指向的文件的偏移量并未改变。
off_t lseek(int fd, off_t offset, int whence)
当
offset <0
时,文件指针将向着文件头的方向移动(这和
offset>0
刚好相反)。
如果
offset
大于文件的大小,将会产生空洞(
hole
)。
int dup2(int fd,int fd2)
新的文件描述符
fd2
拥有和
fd
一样的描述符属性,如
append, read, write
等。
dup2
是一个原子操作。
int fcntl(int fd,int cmd, … /*arg*/)
需要主意的是:
1
、当使用
F_SETFL
时,能改变的标记位只有:
O_NONBLOCK, O_SYNC, O_DSYNC, O_RSYNC, O_FSYNC, O_ASYNC
。
2
、下面是个命令具有不同的返回值,
F_DUPFD, F_GETFD, F_GETFL, F_GETOWN
。其中第一个返回新的文件描述符(类似
dup
),后两个返回当前的标记(
flag
),最后一个返回正的进程
ID
(
positive process ID
)或者负的进程组
ID
(
negative process group ID
)。
关于目录的权限
执行权限允许用户搜索和访问目录(无法
ls
),读权限允许用户列出目录的内容(可以
ls
),写权限意味着可以在该目录中创建文件。
其它
当进程推出的时候将会自动关闭所有的文件描述符,运用这个技术,一些程序可以没有明确的关闭已打开的文件描述符。