• 姓名:施旭轩
  • 学号:201822121062
  • 班级:计算1812

一、编写程序

在服务器上用Vim编写程序:创建一个命名管道,创建两个进程分别对管道进行读fifo_read.c和写fifo_write.c。给出源代码。

#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/stat.h>
#include<fcntl.h>

char writebuffer[200];

int main()
{
   int m = mkfifo("fifo",0777);
   if(m<0)
    {
        printf("mkfifo fails.\n");
        return -1;
   }
    printf("mkfifo success.\n");
    return 0;
}

fifo_write.c源代码

#include<stdio.h>
#include<sys/stat.h>
#include<string.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/types.h>

int main()
{
   int fd = open("fifo",O_WRONLY);
    if(fd == -1)
     {
         perror("mefifo");
        return -1;
    }
    char buf[1024];
    while(1)
   {
        fgets(buf,1024,stdin);
        write(fd,buf,strlen(buf));
    }

    return 0;

fifo_read.c源代码:

#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<string.h>
#include<fcntl.h>
int main()
{
    int fd = open("fifo",O_RDONLY);
    if(fd == -1)
    {
        perror("mkfifo");
        return -1;
    }
    char buf[1024];
    while(1)
    {
        int ret = read(fd,buf,1024);
        buf[ret] = '\0';
        printf("读取到:%s\n",buf);
    }
    return 0;
}

  二、运行结果

开启两个服务器分别打开读fifo_read和写fifo_write,在write中输入的结果可以在read中读取出来。