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

发布于 2024-10-21 07:11:10 字数 83 浏览 5 评论 0原文

我正在尝试在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

万水千山粽是情ミ 2024-10-28 07:11:11

发送包含整数 ASCII 表示形式的字符串,例如 12345679,或发送包含 int 二进制表示形式的四个字节,例如 0x000xbc >、0x610x4f

在第一种情况下,您将使用诸如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.

未央 2024-10-28 07:11:11

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.

我的影子我的梦 2024-10-28 07:11:11

下面的一个可以很好地写入管道并从管道读取:

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

Below one works fine for writing to pipe and reading from pipe as:

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);

output:

CLI process read from res:4 status:123
献世佛 2024-10-28 07:11:10

安全的方法是使用 snprintfstrtol

但是,如果您知道这两个进程是使用相同版本的编译器创建的(例如,它们是 forked 的相同可执行文件),您可以利用以下事实:C 中的任何内容都可以读取或写为 char 数组:

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

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

The safe way is to use snprintf and strtol.

But if you know both processes were created using the same version of compiler (for example, they're the same executable which forked), you can take advantage of the fact that anything in C can be read or written as an array of char:

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

int n;
read(pipe_r, &n, sizeof(n));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文