常见系统调用总结

来源:互联网 发布:域名对应多个ip 编辑:程序博客网 时间:2024/04/29 06:08

fcntl

操作文件描述符
<span style="font-size:18px;">#include <unistd.h>#include <fcntl.h>Int fcntl(int fd, int cmd, …);</span>


主要的三种用途:
A、 复制文件描述符 
F_DUPFD(long),返回新的文件描述符
B、 文件描述符标记位
目前唯一被操作的标记是FD_CLOEXEC
F_GETFD(void)
F_SETFD(long)
C、 文件状态标记
通过open设置的文件状态标记,可以通过fcntl修改,

open

openat()

<span style="font-size:18px;">#include <fcntl.h>int openat(int dirfd, const char *pathname, int flags);int openat(int dirfd, const char *pathname, int flags, mode_t mode);</span>
打开指定dirfd目录下的pathname文件路径
A、 openat()可以避免通过调用open()出现的竞争情况
B、 允许实现单个线程的CWD

dlopen(), dlsym(), dlclose(), dlerror() 

提供动态链接加载器的操作接口

ldopen操作动态链接库
<span style="font-size:18px;">void *dlopen(const char *filename, int flag);#include <dlfcn.h></span>

dlsym()
<span style="font-size:18px;">void *dlsym(void *handle, const char *symbol);</span>

返回symbol所指的内存地址

Sync/syncfs/fsync/fdatasync

fsync:将指定 fd 上的文件数据、以及文件的属性保存到磁盘中,并阻塞直到保存完成。
fdatasync:只保证数据本身,不同步文件属性
syncfs:只同步包含指定fd的文件系统的修改
sync:将所有文件的修改(数据和属性)写入到底层文件系统,排入写队列
fdatasync 和 fsync 的作用类似,但是它只保证数据本身被保存到磁盘,但并不同步更新文件的属性(metadata,比如文件的被修改时间,以及文件的大小,等等),对于无须确保文件属性被同步写入的程序,这个调用的性能比同步 fsync 稍高一些。
还有一个条件更弱的调用 —— sync ,它只要求将所有修改过的块缓存区(包括文件数据和文件属性)排入到写队列,然后就返回,它并不等待实际写磁盘操作结束:

0 0
原创粉丝点击