如何在两个进程之间用管道发送整数!
答
的安全的方法是使用snprintf
和strtol
。
但是,如果您知道这两个进程是使用相同版本的编译器创建的(例如,它们是与编译版本相同的可执行文件),则可以利用C中的任何内容都可以读取或写入的char
数组:
int n = something();
write(pipe_w, &n, sizeof(n));
int n;
read(pipe_r, &n, sizeof(n));
答
要么发送包含的整数例如,12345679
ASCII表示的字符串,或发送包含INT的二进制表示,例如,0x00
,0xbc
,0x61
,0x4f
四个字节。
在第一种情况下,您将使用诸如atoi()
之类的函数来取回整数。
答
下面一个用于写入管道,并从管道读取为正常工作:
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
每个指针可以浇铸为*字符。但我不确定相反是否正确,而不违反严格的别名规则? – 2011-03-08 19:14:24
@cebewee:不确定你的问题到底是什么。 '(short *)(char *)&n'将在解除引用时违反严格的别名。但'short first_two_bytes; memcpy(&first_two_bytes,&n,sizeof(first_two_bytes));'不违反严格的别名。 – aschepler 2011-03-08 19:20:53
@cebewee - 它不是char *,它是void *。每个指针都可以是一个void *。虽然你可能还是对的。这可能会违反严格的别名规则,第二种情况下'n'的值可能不会改变。 – Omnifarious 2011-03-08 19:21:33