文件描述符 -- 6




概述阅读 nginx 源码接触到了一个新的系统调用 -- eventfdeventfd 系统调用是 linux 2.6 以上版本用来在用户空间创建可以用来作为事件等待、通知的文件描述符简单地说,就是可以在用户态应用中建立一个内核态到用户态的通知机制,这在异步 IO 的使用中非常有用但是该调用必须工作在 64 位环境下 函数原型int eventfd(unsigned int intval, int flag); 定义于 sys/eventfd.h 中调用成功返回文件描述符,调用失败,返回 -1 参数 flag 说明通过按位或运算可以使用以下一个或多个标识:eventfd 系统调用 flag 参数取值取值说明EFD_CLOEXEC类似于 open 系统调用的 O_CLOEXEC 标识,一旦 exec 执行后,关闭所有 fdEFD_NONBLOCK非阻塞调用EFD_SEMAPHORE以信号方式处理文件描述符,linux 2.6.26 以上版本将不支持 用法关于该系统调用的实际用法,可以参看 nginx 中的相应代码 var CODE_DIVS=[{"
#技术帖    #linux    #unix    #文件描述符   
daemon 进程关于 daemon 进程的介绍及创建以及需要注意的药店,请参考:daemon 守护进程 信号处理初始化nginx 有一个全局变量 signals,在 build configure 的时候写入到 os 目录下的 ngx_process.c 文件中,在不同的系统中取值不同,用来定义默认的信号处理方式// struct ngx_signal_t // 信号结构 {{{ typedef struct { int signo; char *signame; char *name; void (*handler)(int signo); } ngx_signal_t; // }}} // ngx_signal_t signals // 信号默认处理方式 {{{ ngx_signal_t signals[] = { { ngx_signal_value(NGX_RECONFIGURE_SIGNAL), "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL), "reload", ngx_signa
#技术帖    #linux    #network    #c语言   
因为标准IO都是调用系统调用实现的,所以每个标准IO都有一个与其相关联的文件描述符,可以调用fileno函数获得其描述符int fileno( FILE *stream ); 返回文件描述符 var CODE_DIVS=[{"id":"editor_a","mode":"c_cpp"}];
#读书笔记    #技术帖    #linux    #unix   
在shell中,digit1 > &digit2表示要将描述符digit1重定向到描述符digit2的同一个文件 ./a.out > outfile 2>&1 首先设置标准输出到outfile,然后执行dup将标准输出复制到描述符2(标准错误),然后将标准输出和标准错误重定向到同一文件,即文件描述符1和文件描述符2指向统一文件表项 ./a.out 2>&1 outfile 由于首先执行dup,所以使描述符2成为终端,标准输出重定向到outfile  需要注意的是shell是从左到右处理命令的 
#读书笔记    #技术帖    #linux    #unix   
dup 与 dup2dup和dup2两个函数可以复制现存的文件描述符int dup (int fd) int dup2 (int fd1,int fd2); dup 为fd通过复制(不关闭旧的文件描述符)分配新的文件描述符,该函数一定分配的是当前可用文件描述符中的最小数值dup2 使用 fd1 (必须为已打开的合法filedes) 来代替 fd2,如该值已经存在,则先将其关闭再复制,如fd1与fd2两个参数相等,则返回fd2但不关闭函数返回的新文件描述符与被复制文件描述符共享同一个文件表项,因此他们共享同一个文件状态标志及同一个当前文件偏移量 fcntl函数dup2 (fd1, fd2); 等效于close (fd2); fcntl (fd1, F_DUPFD, fd2);  他们的区别在于 dup2是原子操作 dup2和fcntl有某些不同的errno fcntl有更加强大的功能,可以参看:fcntl函数 -- 功能强大的文件状态操作函数  var CODE_DIVS=[{"id":"editor_b","mode":"c_cpp"},{"id":"editor_c","mode":"c_cpp"},{"id":"editor_e
#读书笔记    #技术帖    #linux    #unix   

200x200


UNIX 系统支持在不同进程间共享打开的文件 内核使用三种数据结构表示打开的文件,他们之间的关系决定了在文件共享方面一个进程可能对另一个进程的影响: 每个进程在进程表中都有一个记录

#技术帖    #操作系统    #龙潭书斋    #apue   



京ICP备15018585号