Linux进程通信之FIFO(有名管道)

首先编写utili.h

#ifndef _UTILI_H
#define _UTILI_H
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#define BUFFER_MAX_SIZE 256

const char *write_fifo_name =  "write_fifo";
const char *read_fifo_name =  "read_fifo";
char sendbuf[BUFFER_MAX_SIZE];

char recvbuf[BUFFER_MAX_SIZE];
#endif

编写服务器端ser.c

#include"utili.h"

int main()
{
    int ret =  mkfifo(write_fifo_name, O_CREAT|0755);
    if(ret == -1)
    {
        perror("mkfifo.");
        exit(1);
    }
    int write_fd =  open(write_fifo_name, O_WRONLY);
    if(write_fd == -1)
    {
        perror("open write fifo.");
        exit(1);
    }
    int read_fd;
    while((read_fd = open(read_fifo_name, O_RDONLY)) == -1);
    {
        sleep(1);
    }
    while(1)
    {
        printf("Ser: >");
        scanf("%s",sendbuf);
        write(write_fd, sendbuf, strlen(sendbuf)+ 1);
        read(read_fd,recvbuf, BUFFER_MAX_SIZE);
        printf("Cli: > %s\n",recvbuf);
    }
    close(write_fd);
    close(read_fd);
    return 0;
}

编写客户端cli.c

#include"utili.h"

int main()
{
    int read_fd =  open(write_fifo_name, O_RDONLY);
        if(read_fd == -1)
        {
            perror("open write fifo.");
            exit(1);
        }
    int ret =  mkfifo(read_fifo_name, O_CREAT|0755);
    if(ret == -1)
    {
        perror("mkfifo.");
        exit(1);
    }
    int write_fd = open(read_fifo_name, O_WRONLY);
    if(write_fd == -1)
    {
        perror("open read fifo");
        exit(1);
    }
    while(1)
    {
        
        read(read_fd,recvbuf, BUFFER_MAX_SIZE);
        printf("Ser: > %s\n",recvbuf);
        printf("cli: >");
        scanf("%s",sendbuf);
        write(write_fd, sendbuf, strlen(sendbuf)+ 1);
    }
    close(write_fd);
    close(read_fd);
    return 0;
}

下面是在Linux环境下的运行结果:

服务器
客户端

猜你喜欢

转载自blog.csdn.net/qq_35353824/article/details/88649741