linux下进程间的通信——有名管道fifo学习笔记

FIFO有名管道特点:
持久稳定,是作为一个文件存在文件系统的;
FIFO可以让两个无关联的进程之间交换数据。

这里通过fifo1有名管道来实现两个窗口之间的交换数据,在readfifo下可以读取到writefifo写入的数据。 就像两个窗口之间的聊天效果。

步骤:
第一步:在linux下使用shell命令建立有名管道
方法: mkfifo [option] name
这里创建一个名为fifo1的有名管道文件 : mkfifo fifo1
第二步:
编写一个readfifo.c 和writefifo.c以及一个makefile文件

readfifo.c 代码如下:

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

int main(int arg, char*args[])
{

    int len = 0;
    char buf[100];
    memset(buf, 0, sizeof(buf));
    int fd = open("fifo1", O_RDONLY);//以只读的方式打开fifo1

    while ((len = read(fd, buf, sizeof(buf))) > 0)
    //循环从fifo1里读取数据,知道fifo1被关闭
    {
        write(STDOUT_FILENO, buf, sizeof(buf));
        memset(buf, 0, sizeof(buf));
    }
    close(fd);//关闭文件fifo1
    return 0;
}

writefifo.c代码如下:

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

int main(int arg, char*args[])
{
    int fd = open("fifo1", O_WRONLY);//以只写的方式打开fifo1
    char buf[100];
    memset(buf, 0, sizeof(buf));

    while (1)
    {
        read(STDIN_FILENO, buf, sizeof(buf));//循环等待用户输入数据
        if (buf[0] == '0')//如果用户输入0,退出循环
            break;
        write(fd, buf, strlen(buf));//将用户从键盘输入的字符通过fifo1传送出去
        memset(buf, 0, sizeof(buf));//每次使用完buf,都要将buf清零
    }
    close(fd);

    return 0;
}

makefile代码如下:

.SUFFIXES: .c .o

CC=gcc

SRCS1=fifo.c
SRCS2=writefifo.c

OBJS1=$(SRCS1:.c=.o)
OBJS2=$(SRCS2:.c=.o)

EXEC1=readfifo
EXEC2=writefifo

all: $(OBJS1) $(OBJS2)
    $(CC) -o $(EXEC1) $(OBJS1)
    $(CC) -o $(EXEC2) $(OBJS2)
    @echo '-------------ok--------------'

.c.o: 
    $(CC) -Wall -g -o $@ -c $<

clean:
    rm -f $(OBJS)
    rm -f core*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值