当前位置: 代码迷 >> 综合 >> 5.6 命名管道:FIFO
  详细解决方案

5.6 命名管道:FIFO

热度:67   发布时间:2023-12-05 23:13:55.0

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;
}

实验结果:

在这里插入图片描述