Linux下C与python进程间的通信

做项目时,碰到需要Linux下C与python需要进行进程间的通信情况,特此记录

主要方法为通过管道进行重定向为标准输出,标准输入,来实现进程间的通信,采用双管道,后续通信可以采用信号来进行同步。

C code如下:

int fd1[2]; //重定向为标准输入
int fd2[2];/、重定向为标准输出
pipe(fd1);
pipe(fd2);

pid_t pid  = fork();

if (pid == 0) //子进程
{
	close(fd1[1]);
	if(fd1[0] != STDIN_FILENO)
	{
		if(dup2(fd1[0], STDIN_FILENO) != STDIN_FILENO)
		{
			perror("dup2 error");
			exit(-1);
		}
	}
	close(fd2[0]);
	if(fd2[1] != STDIN_FILENO)
	{
		if(dup2(fd2[1], STDIN_FILENO) != STDIN_FILENO)
		{
			perror("dup2 error");
			exit(-1);
		}
	}
	execl("./GDBServer_Tinyemu", NULL, NULL);
}
else if (pid > 0)
{
	char * buf1 = "hello";
	char buf[50] = {0};
	int status;
	write(fd1[1], buf1, strlen(buf1));
	int readbytes = read(fd2[0], buf sizeof(buf))
	printf("I have read %d Bytes, My content is %s\n", readbytes, buf);
	waitpid(pid, &status, 0)
}

python code 如下:

data = sys.stdin.read(10);
sys.stdout.writelines(data + “world”)

注意 python code需在Linux下打包成可执行文件,可以通过pyinstaller xx.py来进行打包,上述GDBServer_Tinyemu即为python打包的exe文件,上述代码仅为测试通信code。 在Linux 编译运行C code 既可以打印出I have read xx Bytes, My content is hello world.

原创文章,码字不易,转载请标明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值