我对 Web 服务器的基本原理很感兴趣,例如 Apache 或 Nginx,所以现在我正在开发自己的服务器。
当我的服务器收到请求时,它正在搜索一个文件(例如 index.html
),如果它存在 - 将所有内容读取到缓冲区(content
)然后将其写入套接字。这是一个简化的代码:
int return_file(char* content, char* fullPath) {
file = open(fullPath, O_RDONLY);
if (file > 0) { // File was found, OK
while ((nread = read(file, content, 2048)) > 0) {}
close(file);
return 200;
}
}
问题很简单:是否可以避免使用缓冲区并将文件内容直接写入套接字?
感谢任何提示:)
最佳答案
没有可以直接从文件写入套接字的标准化系统调用。
然而,一些操作系统确实提供了这样的调用。例如,FreeBSD 和 Linux 都实现了一个名为 sendfile
的系统调用,但两个系统的具体细节有所不同。 (在这两种情况下,您都需要文件的底层文件描述符,而不是 FILE*
指针,尽管在这两种平台上您都可以使用 fileno()
来提取 fd来自 FILE*
。)
更多信息:
关于c - 是否可以直接从文件写入套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42907709/