我试图在POSIX系统中发送带管道的整数,但write()
函数用于发送字符串或字符数据。有没有办法用管道发送整数?
此致
答案 0 :(得分:26)
安全的方法是使用snprintf
和strtol
。
但是如果你知道这两个进程都是使用相同版本的编译器创建的(例如,它们是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的二进制表示的四个字节,例如0x00
,0xbc
,{{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