#include /*特别注意写管道时,设置打开管道文件的格式必须为可写*/
#define FIFO_SERVER "myfifo"
#define OPENMODE (O_WRONLY | O_NONBLOCK)
int main(int argc, char **argv)
{
int fd;
int nwrite;
/*打开管道文件,可写非阻塞*/
if ((fd = open(FIFO_SERVER, OPENMODE)) < 0) {
perror("open");
exit(1);
}
/*如果没有在命令行中写入参数,那么要重新运行程序*/
if (argc == 1) {
printf("Please send something\n");
exit(1);
}
/*向管道文件中写入数据,在这里要用strlen,如果用sizeof,则只是4个字节的指针长度*/
if ((nwrite = writefd, argv[1], strlen(argv[1]))) < 0) {
if (errno == EAGAIN) {
printf("The FIFO has not been read yet.Please try later\n");
}
}
else {
printf("write %s to FIFO\n", argv[1]);
}
return 0;
}
/*命令管道最大的优势是可以跨进程操作,本题命令管道的名字是myfifo,放在在当前目录下,也可以放到其他目录,这样其他进程通过这个名字像普通文件一样进行操作。我们也可以手工向此命名管道写入,echo "www" > myfifo,同样在读端也可以收到消息。注意一个地方;管道先要打开读端,否则写端会被阻塞。*/