如何在两个进程之间发送带管道的整数!

时间:2011-03-08 19:04:20

标签: c linux ipc pipe

我试图在POSIX系统中发送带管道的整数,但write()函数用于发送字符串或字符数据。有没有办法用管道发送整数?

此致

4 个答案:

答案 0 :(得分:26)

安全的方法是使用snprintfstrtol

但是如果你知道这两个进程都是使用相同版本的编译器创建的(例如,它们是fork编辑的同一个可执行文件),你可以利用C中的任何内容都可以被读取的事实或写成char

的数组
int n = something();
write(pipe_w, &n, sizeof(n));

int n;
read(pipe_r, &n, sizeof(n));

答案 1 :(得分:1)

发送包含整数的ASCII表示的字符串,例如12345679,或发送包含int的二进制表示的四个字节,例如0x000xbc,{{1} },0x61

在第一种情况下,您将使用0x4f之类的函数来获取整数。

答案 2 :(得分:0)

Aschelpler的答案是正确的,但如果这可以在以后增长,我建议您使用某种简单的协议库,如Google的Protocol Buffers,或只使用JSON或XML,并使用一些基本架构。

答案 3 :(得分:-2)

下面的一个工作正常,可以写入管道并从管道读取:

stop_daemon =123;
res = write(cli_pipe_fd_wr, &stop_daemon, sizeof(stop_daemon));
....
res = read(pipe_fd_rd, buffer, sizeof(int));
memcpy(&stop_daemon,buffer,sizeof(int));
printf("CLI process read from res:%d status:%d\n", res, stop_daemon);

输出:

CLI process read from res:4 status:123