linux进程编程

本文介绍了Linux操作系统中使用有名管道(FIFO)进行进程间通信的方法。首先,通过`mkfifo`函数创建了一个名为`myFile`的FIFO文件,然后分别展示了服务端(只写)和客户端(只读)的程序代码。服务端不断发送等待进程的编号,而客户端则读取并打印这些信息。值得注意的是,FIFO在没有双方同时打开的情况下会阻塞。这是一个基本的进程通信示例,有助于理解Linux进程间的通信机制。
摘要由CSDN通过智能技术生成

linux进程通信之有名管道

1.添加头文件

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#define  M_FIFO_FILE "./myFile"  //定义管道文件

2.创建管道文件

int main(int argc, char *argv[])
{
    int ret = mkfifo(M_FIFO_FILE , 0777);
	if (ret < 0)
	{
		printf("creat myFile fail\n");
		return -1;
	}
	
	printf("creat myFile success\n");
	return 0;
}

3.服务端程序(设置为只写)

int main(int argc, char *argv[])int fd = open(M_FIFO_FILE , O_WRONLY);
	if (fd < 0)
	{
		printf("open myFile fail \n");
		return -1;
	}
	
	printf("open myFile success \n");
	for (int i = 0; i < 5; i++)
	{
		printf("wait pocess is:%d\n", i);
		sleep(1);
	}

	char buf[128];
	while (1)
	{
		memset(buf,0, sizeof(buf));
		scanf("%s", buf);
		write(fd, buf, strlen(buf));
	}
	
	close(fd);
	return 0;
}

4.客户端程序(设置为只读)

int main(int argc, char *argv[])int fd = open(M_FIFO_FILE , O_RDONLY);
	if (fd < 0)
	{
		printf("open myFile fail\n");
		return -1;
	}
	
	printf("open myFile success\n");
	
	char buf[128];
	int len;

	while(1)
	{
		memset(buf,0,sizeof(buf));
		len = read(fd, buf, sizeof(buf));
		if (len > 0)
		{
			printf("read: %s\n", buf);
		}
	}
	
	close(fd);
	return 0;

5.总结

  1. 服务端或客户端单独打开会阻塞,直到双方都打开为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值