【发布时间】:2013-09-10 15:10:56
【问题描述】:
在我的软件中,我为 IPC 使用 PF_UNIX-socket。
到目前为止,我需要通过malloc 分配一个(预)缓冲区来准备数据,然后再通过write 将数据写入缓冲区。
现在我想知道:
socket-fd 已经有一个缓冲区,例如。 64kb,那么为什么我不能像这样直接准备并将数据写入该缓冲区:
// stupid example-code, don't copy
void *fd_buffer = get_buffer_of_fd(fd)
fd_buffer[0] = 1
fd_buffer[1] = 2
fd_buffer[2] = 3
memcpy(fd_buffer, 5, 5)
...
commit_buffer_of_fd(fd, xbytes); // xBytes is DYNAMIC and not known until this point!!
如果可能的话,我可以省去复制到预缓冲区、从预缓冲区写入套接字甚至分配预缓冲区的往返过程。
有人知道这是否可行吗?
【问题讨论】:
-
我很确定你想要的东西没有得到任何支持。此外,如果在套接字上复制数据所花费的时间是如此之大,为什么不直接使用共享内存进行通信呢?它会更快、更干净,并且得到实际支持。
-
非常感谢您的反馈。没什么大不了的,我只是在寻找更好的方法 :-) 因为我在 Android 上,所以遗憾的是没有共享内存的方法。非常感谢!
-
一些拼接的例子:ogris.de/howtos/splice.html
-
好提示,谢谢我会分析这个:)
标签: c shared-memory unix-socket