有名管道

来源:互联网 发布:联通软件研究院怎么样 编辑:程序博客网 时间:2024/04/30 02:09
//命名管道特点://1.如果打开管道的一方仅以读或写的方式打开管道,必须需要另一方的介入,管道才能打开//双方都调用open//可以一方打开,以读写的方式打开open(DEF_FIFO_PATH,O_RDWR)//发送少量简单无格式的数据//双方读写都存在,才能打开管道//计时性存储数据//2.存在的文件//3.单向写入,单向写出//问答形式#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include <fcntl.h>#define DEF_FIFO_PATH ("./FIFO")#define DEF_STD_ERROR (-1)int main(int argc,char *argv[]){        int ret;        int fd;        char str[1024];        //if argv[1] > 0,writer        if(atoi(argv[1])>0){ret = mkfifo(DEF_FIFO_PATH,S_IWUSR | S_IRUSR);if(ret == DEF_STD_ERROR){if(errno == EEXIST){printf("Fifo always exist\n");}else{printf("%d\n",strerror(errno));return -1;}}//open fifofd = open(DEF_FIFO_PATH,O_WRONLY)//O_WRONLY紧以读的方式打开,两个进程if(fd == DEF_STD_ERROR){printf("%d\n",strerror(errno));//delete pipe打开失败删除文件(管道)unlink(DEF_FIFO_PATH);return -1;}//writewhile(1){printf("Please input string:\n");scanf("%s",str);write(fd,str,strlen(str)+1);if(!strcmp(str,"goodbye")){break;}}//close fifoclose(fd);}    else {//if argv[1] <= 0,reader//check fiforet = access(DEF_FIFO_PATH,W_OK);if(ret == DEF_STD_ERROR){printf("%d\n",strerror(errno));return -1;}//open fifofd = open(DEF_FIFO_PATH,O_RDONLY);if(fd == DEF_STD_ERROR){printf("%d\n",strerror(errno));return -1;}//read fifowhile(1){read(fd,str,sizeof(str));printf("Receive data:[%s]\n",str);if(strcmp("goodbye",str)==0){break;}}//close fifoclose(fd);}        return 0;}

0 0