如何用管道在两个进程之间发送整数!
我正在尝试在 POSIX 系统中使用管道发送整数,但 write() 函数正在用于发送字符串或字符数据。有没有办法用管道发送整数?
问候
I am trying to send an integer with pipe in a POSIX system but write()
function is working for sending string or character data. Is there any way to send integer with a pipe?
Regards
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
发送包含整数 ASCII 表示形式的字符串,例如
12345679
,或发送包含 int 二进制表示形式的四个字节,例如0x00
、0xbc
>、0x61
、0x4f
。在第一种情况下,您将使用诸如atoi()之类的函数来获取整数。
Either send a string containing the ASCII representation of integer e.g.,
12345679
, or send four bytes containing the binary representation of int, e.g.,0x00
,0xbc
,0x61
,0x4f
.In the first case, you will use a function such as
atoi()
to get the integer back.Aschelpler 的答案是正确的,但如果这是以后可以增长的东西,我建议您使用某种简单的协议库,例如 Google 的 协议缓冲区或只是带有一些基本模式的 JSON 或 XML。
Aschelpler's answer is right, but if this is something that can grow later I recommend you use some kind of simple protocol library like Google's Protocol Buffers or just JSON or XML with some basic schema.
下面的一个可以很好地写入管道并从管道读取:
输出:
Below one works fine for writing to pipe and reading from pipe as:
output:
安全的方法是使用
snprintf
和strtol
。但是,如果您知道这两个进程是使用相同版本的编译器创建的(例如,它们是
fork
ed 的相同可执行文件),您可以利用以下事实:C 中的任何内容都可以读取或写为char
数组:The safe way is to use
snprintf
andstrtol
.But if you know both processes were created using the same version of compiler (for example, they're the same executable which
fork
ed), you can take advantage of the fact that anything in C can be read or written as an array ofchar
: