如何在两个进程之间用pipe道发送整数!

我想在POSIX系统中用pipe道发送一个整数,但是write()函数用于发送string或字符数据。 有没有办法用pipe道发送整数?

问候

Solutions Collecting From Web of "如何在两个进程之间用pipe道发送整数!"

安全的方法是使用snprintfstrtol

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

 int n = something(); write(pipe_w, &n, sizeof(n)); int n; read(pipe_r, &n, sizeof(n)); 

要么发送一个包含整数的ASCII表示的字符串(例如12345679 ,要么发送包含int的二进制表示形式(例如1234567912345679四个字节。

在第一种情况下,您将使用atoi()等函数返回整数。

Aschelpler的答案是正确的,但是如果这种情况可能会在以后增长的话,我建议你使用一些简单的协议库,比如Google的协议缓冲区,或者只是使用JSON或者XML,以及一些基本的模式。

下面的一个工作正常写入管道和读取管道:

 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