• Linux IPC BSD Pipe


    mkfifo()

    //创建有名管道(FIFO special file),创建完了就像普通文件一样open(),再读写,成功返回0,失败返回-1设errno。VS$man 3 mkfifo
    #include <sys/types.h>
    #include <sys/stat.h>
    int mkfifo(const char *pathname, mode_t mode);
    

    pathname:the FIFO special file's name

    mode :the FIFO's permissions.

    //创建FIFO管道文件
    int res=mkfifo(“./a.fifo”,0664);
    if(-1==res)
    	perror("mkfifo"),exit(-1);
    res=open(“./a.fifo”,O_RDONLY);
    if(-1==res)
    	perror(“open”),exit(-1);
    

    pipe()

    //创建无名管道,相当于直接把open()返回的fd直接放到形参中,而不需额外的变量接收管道文件的描述符,用于父子进程间通过管道进行IPC通信,,成功返回0,失败返回-1设errno
    #include <unistd.h>
    int pipe(int pipefd[2]);    //代码自注释,表示它需要的参数是一个有两个元素的数组,如果虽然作为形参,实质上和int* pipefd没有区别
    

    pipefd :return two fds referring to the ends of the pipe.

    • pipefd[0] :read end,读端
    • pipefd[1] :write end,读端.

    fork()创建的child也会文件描述符总表也会复制一份So,对于child, 应该先关闭读端, 再写,对于parent,应该先关闭写端, 再读

    //使用pipe()实现父子进程的通信
    #include<unistd.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<stdlib.h>
    #include<stdio.h>
    int main(){
    	//1. 创建无名管道
    	int pipefd[2];
    	int res=pipe(pipefd);
    	if(-1==res)
    		perror("pipe"),exit(-1);
    	//2. 创建子进程
    	pid_t pid=fork();
    	if(-1==pid)
    		perror("fork"),exit(-1);
    
    	//3. 子进程开始启动,写入1~100;
    	if(0==pid){
    		close(pipefd[0]);
    		int i=0;
    		for(i=1;i<=100;i++){
    			write(pipefd[1],&i,sizeof(int));
    		}
    		close(pipefd[1]);//关闭写端
    		exit(0);
    	}
    	
    	//4. 父进程开始启动,读取管道中的数据
    	close(pipefd[1]);
    	int i=0;
    	for(i=1;i<=100;i++){
    		int x=0;
    		read(pipefd[0],&x,sizeof(int));
    		printf("%d ",x);
    	}
    	printf("
    ");
    	close(pipefd[0]);
    	return 0;
    }
    
  • 相关阅读:
    ckeditor添加自定义按钮整合swfupload实现批量上传图片
    H5移动端适配之px转vw(附工具)
    原生js实现复制文本到粘贴板
    快速删除项目中的输出日志console.log
    toString和valueOf使得对象访问时显示一个特定格式的字符串,但是可以进行数字运算
    __defineGetter__和__defineSetter__在日期中的应用
    观察者模式(订阅-发布者模式)
    原生js扫雷代码
    身份证验证思路及代码
    IMEI校验思路及代码
  • 原文地址:https://www.cnblogs.com/xiaojiang1025/p/5935471.html
Copyright © 2020-2023  润新知