//管道初始化 int pipe_init(char *myfifo) { int fd; int res; // 判断是否存在命名管道文件 if (access(myfifo, F_OK) != -1) { printf("%s管道存在.\n", myfifo); // remove(myfifo); chmod(myfifo,0777); }else{ //不存在 res = mkfifo(myfifo, 0777);//问题:这里创建的并不是777权限,而是755 if (res < 0) { printf("create fifo failure\n"); exit(1); } else { printf(">>>Create pipe...OK!! \n"); chmod(myfifo,0777); } } // 打开命名管道 fd = open(myfifo, O_WRONLY );//| O_NONBLOCK if (fd < 0) { printf(">>>Failed to open pipe:%s,fd=%d \n",myfifo,fd);// pipe_cloes(fd,myfifo); exit(1); } else { printf(">>>Writing data to Pipe... fd=%d\n",fd); } return fd; } //发送到管道中 int pipe_send(int *fd,unsigned char *data,int size){ int ret=0; ret = write(&fd, data, size); if(ret > 0){ printf(">>>write ok !!! ,size:%d \n\r",ret); }else{ printf(">>>write error !!! ret=%d fd=%d \n\r",ret,fd); } return 0; } //关闭管道 int pipe_cloes(int fd,char *myfifo){ close(fd); unlink(myfifo); }
时间: 2024-04-25 13:26:59 浏览: 22
这是一个使用 Linux 命名管道的例程。命名管道是一种特殊的文件,可以用于在不同进程间进行通信。这个例程中,先检测命名管道文件是否存在,如果存在则修改权限,不存在则创建并设置权限。然后通过 open() 函数打开管道文件,并返回管道的文件描述符。最后通过 write() 函数向管道中写入数据,close() 函数关闭文件描述符并删除命名管道文件。
其中,pipe_init() 函数用于初始化命名管道,pipe_send() 函数用于向管道中发送数据,pipe_close() 函数用于关闭管道。注意,在使用命名管道时,需要在不同的进程中使用不同的文件描述符打开同一个管道文件。