邹平网站建设优化公司,wordpress如何优化速度,西安网站优化培训,wordpress 显示1.匿名管道的特点
以下管道的统称仅代表匿名管道。
管道是一个只能单向通信的通信信道。为了实现进程间通信.管道是面向字节流的。仅限于父子通信或者具有血缘关系的进程进行进程见通信。管道自带同步机制#xff0c;原子性写入。管道的生命周期是随进程的。
2.匿名管道通信…1.匿名管道的特点
以下管道的统称仅代表匿名管道。
管道是一个只能单向通信的通信信道。为了实现进程间通信.管道是面向字节流的。仅限于父子通信或者具有血缘关系的进程进行进程见通信。管道自带同步机制原子性写入。管道的生命周期是随进程的。
2.匿名管道通信的四种情况
读端不读或者读的慢写端要等读端。读端关闭写端收到SIGPIPE信号直接终止。写端不写或者写的慢读端要等写端写端关闭读端读完pipe内部的数据然后再读会读到0表示读到文件结尾。
3.pipe函数介绍
在Linux中pipe() 是一个底层系统调用用于创建管道(pipe)。pipe函数的使用如下
#includeunistd.h//使用所需包含的头文件
int pipe(int pipefd[2]);对于参数pipefd是一个两个元素的整型数组它是一个传出参数用于存放管道的读写文件描述符。其中pipefd[0]为管道读端pipefd[1]为管道写端。这两个文件描述符可以像其他文件描述符一样进行读写操作。
4.pipe函数使用示例
#include stdio.h
#include string.h
#include unistd.h
#include sys/wait.h
#include stdlib.hint main()
{//定义pipe函数所需的pipe_fd用来存放文件描述符。int pipe_fd[2] {0};if(pipe(pipe_fd) 0){perror(pipe);return 1;}printf(%d, %d\n, pipe_fd[0], pipe_fd[1]);//创建子进程pid_t id fork();if(id 0){perror(fork);return 2;}else if(id 0) { //write//child//在子进程中关闭读端close(pipe_fd[0]);char c x;int count 0;while(1){write(pipe_fd[1], c, 1); count;printf(write: %d\n, count);}//使用完结束不要忘记关闭写端close(pipe_fd[1]);exit(0);}else{ //read//parent//在父进程中关闭写端close(pipe_fd[1]);char buffer[64];while(1){buffer[0] 0;//从读端读取sizeof(buffer)-1个字节到buffer中ssize_t size read(pipe_fd[0], buffer, sizeof(buffer)-1);if(size 0){//读取成功buffer[size] 0;printf(parent get messge from child# %s\n, buffer);}else if(size 0){printf(pipe file close, child quit!\n);break;}else{//TODObreak;}}//定义进程等待状态并进行进程等待int status 0;if(waitpid(id, status,0) 0){printf(child quit, wait success!, sig: %d\n, status0x7F);}close(pipe_fd[0]);}return 0;
}5.从文件描述的角度深入理解匿名管道