读管道程序:
引用#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#define FIFO_NAME "myfifo"
#define BUF_SIZE 1024
int main( void)
{
int fd;
char buf [ BUF_SIZE ];
umask( 0);
fd = open( FIFO_NAME , O_RDONLY);
read( fd , buf , BUF_SIZE);
printf( "Read content: %s \n " , buf);
close( fd);
exit( 0);
}
写管道程序:
引用#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#define FIFO_NAME "myfifo"
#define BUF_SIZE 1024
int main( void)
{
int fd;
char buf [ BUF_SIZE ] = "Hello procwrite, I come from process named procread!";
umask( 0);
if ( mkfifo( FIFO_NAME , S_IFIFO | 0666) == - 1) {
perror( "mkfifo error!");
exit( 1);
}
if (( fd = open( FIFO_NAME , O_WRONLY)) == - 1) {
perror( "open error!");
exit( 1);
}
write( fd , buf , strlen( buf) + 1); /*strlen(buf)+1 是把'\0'也写过去*/
close( fd);
exit( 0);
}
运行及输出:
编译后,先运行 procwrite.exe ( 运行后处于阻塞状态 )
打开另一个终端运行 procread.exe 程序,输出:
引用beyes@linux-beyes:~/C/pipe> ./procread.exe
Read content: Hello procwrite, I come from process named procread!
假如不是运行 procread.exe 这个程序,而是直接:
cat myinfo
同样可以看到输出结果,且一旦内容被读出,procwrite.exe 解除阻塞退出。