目录
1. 管道通信
2. 管道函数
- 管道写端关闭
- 管道读端关闭
3. 命名管道(FIFO)
/* rdfifo.c */
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <limits.h>
int main(void)
{
int fd, fd2;
int len;
char buf[PIPE_BUF] = "abc\n";
mode_t mode = 0666;
if (mkfifo("fifo1", mode) < 0)
perror("mkfifo error");
if ((fd = open("fifo1", O_RDONLY)) < 0)
perror("open error");
while ((len = read(fd, buf, PIPE_BUF-1)) > 0) {
printf("rdfifo read : %s", buf);
}
close(fd);
exit(EXIT_SUCCESS);
}
/* wrfifo.c */
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <limits.h>
#include <time.h>
#include <signal.h>
int main(void)
{
int fd;
int len;
char buf[PIPE_BUF];
time_t tp;
printf("I am %d\n", getpid());
if ((fd = open("fifo1", O_WRONLY)) < 0) {
perror("open");
exit(EXIT_FAILURE);
}
printf("between open and write\n");
while(1) {
time(&tp);
len = sprintf(buf, "wrfifo %d sends %s", getpid(), ctime(&tp));
if ((write(fd, buf, len+1)) < 0) {
perror("write");
close(fd);
exit(EXIT_FAILURE);
}
sleep(3);
}
close(fd);
exit(EXIT_SUCCESS);
}