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

该博客介绍有名管道实验,需编写utili.h、服务器端ser.c和客户端cli.c,展示了在Linux环境下的运行结果,表明FIFO的使用者之间无关系也能正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有名管道实验的框图:

首先编写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环境下的运行结果:

服务器
客户端

FIFO的使用者之间没有关系也是可以正常工作的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值