📄 test5.2.c
字号:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <errno.h>#include <sys/stat.h>#include <fcntl.h>#define BUFFER_SIZE 1024#define FIFO "/tmp/fifo.test"void consumer_process_main(void);void parent_process_main(void);int main(int argc, char **argv){ consumer_process_main(); return 0;}void consumer_process_main(void){ int fd; //fd = open(FIFO, O_RDONLY | O_NONBLOCK); fd = open(FIFO, O_RDONLY); sleep(10); if (fd < 0) { fprintf(stderr, "[%d]open FIFO %s for reading failed: %s\n", getpid(), FIFO, strerror(errno)); return; } else { fprintf(stdout, "[%d]open FIFO %s for reading successed, fd = %d\n", getpid(), FIFO, fd); //sleep(10); //close(fd); } //sleep(100); fprintf(stdout, "[%d]Read data from pipe, fd = %d\n", getpid(), fd); char buf[BUFFER_SIZE]; ssize_t n; memset(buf, 0, BUFFER_SIZE); // ssize_t read(int fildes, void *buf, size_t nbyte); n = read(fd, buf, BUFFER_SIZE); if (n < 0) { fprintf(stdout, "[%d]Read from pipe failed: %s\n", getpid(), strerror(errno)); // FIXME: handle read error } else if (n == 0) { fprintf(stdout, "[%d]Read from pipe return 0.\n", getpid()); } else { fprintf(stdout, "[%d]Read %d bytes from pipe.\n", getpid(), n); fprintf(stdout, "[%d]Message: %s\n", getpid(), buf); if (strlen(buf) < 8) { fprintf(stdout, "[%d]Can not get data length.\n", getpid()); // FIXME: read rest data. } else { int length; char str[BUFFER_SIZE]; memset(str, 0, BUFFER_SIZE); memcpy(str, buf, 8); length = atoi(str); if ((strlen(buf)) < 8 + length) { fprintf(stdout, "[%d]There's no enough data for parsing", getpid()); // FIXME: read rest data } else { fprintf(stdout, "[%d]We have read all required data.\n", getpid()); } } } close(fd);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -