网络编程-高级I/O函数

网络编程相关的高级I/O函数

大致分为三类:

  • 用于创建文件描述符的函数,pipe dup/dup2
  • 用于读写数据的函数readv/writev sendfile mmap/munmap splice tee
  • 用于控制I/O行为和属性的函数fcntl

pipe函数

创建管道,常用于进程间通信。

#include <unistd.h>
int pipe(int fd[2]);

此外,socket基础API提供一个socketpair函数,创建一个双向管道,在半同步/半异步进程池的实现中,使用其进行父子进程间通信,其中domain参数为UNIX本地域协议族AF_UNIX.

#include <sys/types.h>
#include <sys/socket.h>
int socketpair(int domain, int type, int protocol, int fd[2]);

dup和dup2

常用于把标准输入重定向到一个文件,或者把标准输入重定向到一个网络连接,如CGI编程。

#include <unistd.h>
int dup(int file_descriptor);
int dup2(int file_descriptor_one, int file_descriptor_two);

重定向的例子:

close(STDOUT_FILENO);
dup(m_sockfd);

readv和writev

分散读集中写

#include <sys/uio.h>
ssize_t readv(int fd, const struct iovec* vector, int count);
ssize_t writev(int fd, const struct iovec* vector, int count);

应用场景:web服务器解析一个http请求之后,如果请求的目标文件存在且有读权限,那么服务器会发送一个http应答来传输文件。http应答包含状态行、头部字段、空行和文档内容。其中,前三部分可能被放置在一块内存中,而文件内容则通常被读到另外内存中,这时不需要将内容拼接到一起,直接使用writev函数将它们同时写出

参考 《Linux高性能服务器编程》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值