Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不带文件描述符的Sendfile_C++_C_Linux_Sockets_Sendfile - Fatal编程技术网

C++ 不带文件描述符的Sendfile

C++ 不带文件描述符的Sendfile,c++,c,linux,sockets,sendfile,C++,C,Linux,Sockets,Sendfile,我有一个内存区域,其中包含我希望通过以太网发送到其他客户端的数据。为了提高吞吐量,目前我正在摆弄sendfileapi,而不是传统的发送/写入API。但据我所知,sendfileapi需要输入一个文件描述符,但我只有原始内存数据。那么,为了使用sendfile API,我应该做些什么呢?sendfile()的主要好处是,它允许您避免在发送()数据之前先将数据从文件描述符读取()到内存中的开销。如果要发送的数据已在内存中,则不需要sendfile()。使用奇怪的变通方法将数据移动到文件中(如mma

我有一个内存区域,其中包含我希望通过以太网发送到其他客户端的数据。为了提高吞吐量,目前我正在摆弄sendfileapi,而不是传统的发送/写入API。但据我所知,sendfileapi需要输入一个文件描述符,但我只有原始内存数据。那么,为了使用sendfile API,我应该做些什么呢?

sendfile()的主要好处是,它允许您避免在发送()数据之前先将数据从文件描述符
读取()
到内存中的开销。如果要发送的数据已在内存中,则不需要
sendfile()
。使用奇怪的变通方法将数据移动到文件中(如
mmap()
ing它)只会降低性能。

如果运行linux,可以查看splice

创建文件吗?名字告诉你它做什么;如果没有文件,
sendfile()
不适用,是吗?我明白了,以前我认为有一种方法可以打开特定的内存区域并将文件描述符传递给sendfile。那么在你看来,哪一个更快?1.mmap数据区域,然后使用sendapi从内存中重复读取,直到发送所有数据。2.挂载一个ramdisk,使用内存中的数据创建一个原始文件,然后使用sendfileapi发送过来。OK;让我先退一步,这里有一些非常复杂的接口,
sendfile()
可能就是其中之一。但是,根据名称,您需要一个文件。它不是POSIX标准函数;它是一个Linux扩展。。这里既没有文件描述符也没有管道。我在触发器上太快了