1、实验代码
fifo_demo.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
int main (void)
{
mkfifo ("my_fifo", 0644);
int ret_from_fork;
int fifo_fd;
ret_from_fork = fork ();
if (ret_from_fork == -1)
{
perror ("fork");
exit (EXIT_FAILURE);
}
else if (ret_from_fork == 0)
{
fifo_fd = open ("my_fifo", O_WRONLY);
char buf[100];
memset (buf, 0, 100);
printf ("child process(%d) input msg:", getpid ());
fgets (buf, 100, stdin);
int write_len = write (fifo_fd, buf, strlen (buf));
printf ("%d bytes hace been sent\n", write_len);
_exit (EXIT_SUCCESS);
}
else
{
sleep (1);
fifo_fd = open ("my_fifo", O_RDONLY);
char buf[100];
memset (buf, 0, 100);
read (fifo_fd, buf, 100);
printf ("parent process(%d) read msg from FIFO: %s\n", getpid (), buf);
exit (EXIT_SUCCESS);
}
return 0;
}
实验结果:
write_fifo.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
int main (int argc, char *argv[])
{
mkfifo ("my_fifo", 0644);
int fifo_fd = open ("my_fifo", O_WRONLY);
char buf[100];
memset (buf, 0, 100);
fgets (buf, 100, stdin);
int write_len = write (fifo_fd, buf, strlen (buf));
printf ("%d bytes have been sended to FIFO.\n", write_len);
return 0;
}
read_fifo.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
int main (int argc, char *argv[])
{
mkfifo ("my_fifo", 0644);
int fifo_fd = open ("my_fifo", O_RDONLY);
char buf[100];
memset (buf, 0, 100);
read (fifo_fd, buf, 100);
printf ("Read from FIFO: %s\n", buf);
return 0;
}
实验结果: