socketpair -- 4




200x200


最简单的进程之间传递信息的方式是通过 fork 或 exec 传送已打开的文件,或两进程通过打开相同的文件来进行数据的共享进程之间通信还有其他技术 -

#读书笔记    #技术帖    #linux    #unix   
描述符传递进程间通信的另一种方式是直接使用已经打开的描述符,比如 socket 描述符,这样一个进程在这个描述符上写数据,一个进程在这个描述符上读数据,即可实现通信下面的方法可以传递已打开的描述符:fork 返回后,子进程与父进程共享所有已打开的描述符,同时,exec 执行后,一般已打开的描述符状态仍然会保持不变但是限制在于必须是父子进程间通信并且只能由父进程传递给子进程下面即将介绍的 socketpair 函数则没有这样的限制socketpair 函数int socketpair (int family, int type, int protocol, int sockfd[2]); 定义于 sys/socket.h调用成功返回非 0 的连接描述符,出错返回 -1 family 参数必须为 AF_LOCALprotocol 参数必须为 0type 参数可以选择 SOCK_STREAM 或 DGRAM_STREAM新创建的两个套接字描述符作为 sockfd[0] 和 sockfd[1] 返回type 为 SOCK_S
#读书笔记    #技术帖    #linux    #unix   
概述unix 域协议并不是一个实际的协议族,而是在单个主机上执行 C/S 通信的一种方式,是进程间通信的方法之一unix 域协议提供两类套接字:字节流套接字和数据报套接字,分别类似于 TCP 和 UDP,他所使用的 API 几乎等同于网络 C/S 通信所使用的 API优势与其他 IPC 方法相比,unix 域协议有以下优势:与两端位于同一个主机的 TCP 套接字相比,速度快一倍可以在同一主机的不同进程间传递描述符域套接字会将客户凭证(用户ID和组ID)提供给服务器,从而可以提供额外的安全措施unix 域套接字地址结构struct sockaddr_un { sa_family_t sun_family; /* AF_LOCAL */ char sun_path[140]; /* null-terminated pathname */ } 定义于 sys/un.h存放在sun_path数组中的路径名必须以空字符结尾,如果 sun_path 是一个空字符串,则等价于 IPv4 的 INADDR_ANY 或&n
#读书笔记    #技术帖    #linux    #unix   
worker 进程的批量创建 -- ngx_spawn_process// ngx_pid_t // ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data, // char *name, ngx_int_t respawn) // 创建子进程 {{{ ngx_pid_t ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data, char *name, ngx_int_t respawn) { u_long on; ngx_pid_t pid; ngx_int_t s; if (respawn >= 0) { s = respawn; } else { // 如果进程已退出,则使用该节点存储新的进程信息 for (s = 0; s < ngx_last_process; s++) { if (ngx_processes[s].pid == -1) { break; }
#技术帖    #linux    #socket    #龙潭书斋   



京ICP备15018585号