FIFO—进程通信(2)

FIFO—进程通信(2),第1张

1.基本概念

FIFO被称为命名管道。

未命名的管道只能在两个相关进程间使用。

但是,通过FIFO,不相关的进程也能交换数据。

 

2.实质

是磁盘中创建一个节点,用来标记内核中一个pipe。

 

3.小例子:

(1)fifo_w.c

#include
#include
#include
#include
#include
#include
#include

void sys_err(char *str,int exitno){
    perror(str);
    exit(exitno);
}

int  main(int argc,char *argv[]){
    char *buf[256]="hello nihao\n";
    int fd;
    if(argc<2){
        printf("./a.out fifoname\n");
        exit(1);
    }
   // fd=open(argv[1],O_RDONLY);
    fd=open(argv[1],O_WRONLY);
    if(fd<0){
        sys_err("open",1);
    }
    //向管道里写
    write(fd,buf,strlen(buf));//strlen
    close(fd);
    return 0;
}

 (2)fifo_r.c

#include
#include
#include
#include
#include
#include
#include

void sys_err(char *str,int exitno){
    perror(str);
    exit(exitno);
}

int  main(int argc,char *argv[]){
    char *buf[256];
    int fd;
    if(argc<2){
        printf("./a.out fifoname\n");
        exit(1);
    }
    fd=open(argv[1],O_RDONLY);
    if(fd<0){
        sys_err("open",1);
    }
    //向管道里写
    int len=read(fd,buf,sizeof(buf));//strlen
    write(STDOUT_FILENO,buf,len);
	close(fd);
    return 0;
}

 开两个shell,只写未读时会阻塞。

 

利用命名管道不会在磁盘当中留下痕迹,其大小还是0。

只是磁盘上的一个节点,这个节点去索引内核中的一个缓冲区

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/674369.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存