这是代码段
这是出现的错误,提示FIFO_SERVER没有定义
请求帮助!!!
解决方案
因为系统默认的fifo权限是000, 所以你需要先修改权限再open
完整的代码如下
read
#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define FIFO_SERVER "/tmp/myfifo"main(int argc, char** argv) { char buf_r[100]; int fd; int nread; if ((mkfifo(FIFO_SERVER, O_CREAT | O_EXCL |O_RDWR) < 0) && (errno != EEXIST)) { perror("can not creat fifoserver"); exit(1); } char cmd[100]; sprintf(cmd, "chmod 704 %s", FIFO_SERVER); system(cmd); printf("preparing for reading bytes...\n"); memset(buf_r, 0, sizeof(buf_r)); fd = open(FIFO_SERVER, O_RDONLY | O_NONBLOCK, 0); if (fd == -1) { perror("open"); exit(1); } while (1) { memset(buf_r, 0, sizeof(buf_r)); if ((nread = read(fd, buf_r, 100)) == -1) { if (errno == EAGAIN) printf("no data yet\n"); } printf("read %s from FIFO\n", buf_r); sleep(1); }// pause(); close(fd); unlink(FIFO_SERVER);}
write
#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define FIFO_SERVER "/tmp/myfifo"int main(int argc, char** argv){ int fd; char w_buf[100]; int nwrite; fd = open(FIFO_SERVER, O_WRONLY | O_NONBLOCK,0); if (fd == -1) { perror("open error;no reading process"); exit(1); } if (argc == 1) { printf("please send somenthing\n"); exit(1); } strcpy(w_buf, argv[1]); if ((nwrite = write(fd, w_buf, 100)) == -1) { if (errno == EAGAIN) printf("the fifo has not been read yet.Please try later\n"); } else printf("write %s to the fifo\n", w_buf); close(fd); return 0;}
运行
先运行reader, 再运行writer
reader
harriszh Fri 1:03@ ~/trunk/cpp/fifo3$ ./readpreparing for reading bytes...read from FIFOread from FIFOread from FIFOread from FIFOread from FIFOread from FIFOread from FIFOread from FIFOread abc from FIFOread from FIFOread from FIFOread from FIFOread from FIFOread from FIFOread from FIFOread abc from FIFOread from FIFOread from FIFOread from FIFOread from FIFO
writer
harriszh Fri 1:03@ ~/trunk/cpp/fifo3$ ./write abcwrite abc to the fifoharriszh Fri 1:03@ ~/trunk/cpp/fifo3$ ./write "abc"write abc to the fifo