fcntl -- 4




nginx 的互斥锁nginx 自己实现了互斥锁,这样做的目的主要是为了兼容性,在不支持锁甚至不支持原子操作的环境下实现锁操作 nginx 锁结构ngx_accept_mutex 是一个 ngx_shmtx_t 结构体,ngx_shmtx_t 描述了 nginx 的锁结构// struct ngx_shmtx_t // nginx 锁结构 {{{ typedef struct { #if (NGX_HAVE_ATOMIC_OPS) // 是否支持原子操作 ngx_atomic_t *lock; #if (NGX_HAVE_POSIX_SEM) // 是否支持信号量 ngx_atomic_t *wait; ngx_uint_t semaphore; sem_t sem; #endif #else // 不支持原子操作则使用文件操作 ngx_fd_t fd; u_char *name; #endif ngx_uint_t spin; // 自旋锁标识 } ngx_shmtx_t; // }}}  nginx 使用这个结构实现了&n
#技术帖    #龙潭书斋    #fcntl    #进程   
函数简介fcntl 函数可执行各种描述符控制操作ioctl 函数则对 io 操作定义了各种控制操作小结fcntl、ioctl 和路由套接字操作小结操作fcntlioctl路由套接字POSIX规定首选方案设置套接字为非阻塞IO型F_SETFL, O_NONBLOCKFIONBIO fcntl设置套接字为信号驱动IO型F_SETFL, O_ASYNCFIOASYNC fcntl设置套接字属主F_SETOWNFIOCSPGRP 或 FIOSETOWN fcntl获取套接字属主F_GETOWNFIOCGPGRP 或 FIOGETOWN fcntl获取套接字接收缓冲区中的字节数 FIONREAD  测试套接字是否处于带外标志 SIOCATMARK sockatmark获取接口列表 SIOCGIFCONFsysctl 接口操作 SIOC[GS]IFxxx  ARP高速缓存操作 SIOCxARPRTM_xxx 路由表操作 SIOCxxxRTRTM_xxx 函数原型这里我们主要讨论 fcntlint fcntl(int fd, int cmd, ... /* arg */
#读书笔记    #技术帖    #linux    #unix   
函数原型UNIX下的fcntl函数可以改变已打开的文件性质int fcntl(int fd , int cmd, ... );  功能:复制一个现有的文件描述符     cmd=F_DUPFD获得/设置文件描述符标记      cmd=F_GETFD 或 F_SETFD获得/设置文件状态标志        cmd=F_GETFL 或 F_SETFL获得/设置异步IO所有权        cmd=F_GETOWN 或 F_SETOWN获得/设置记录锁              cmd=F_GETLK、F_SETLK 或 F_SETLKW cmd参数取值 F_DUPFD -- 复制文件描述符 前面有介绍过另外两个UNIX文件描述符复制函数:DUP 和 DUP2 指定该参数后,
#读书笔记    #技术帖    #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   



京ICP备15018585号