Linux 高级I/O函数

一、pipe()函数

1.1、pipe函数创建一个管道,以实现进程间通信。

1.2、int pipe(int fd[2]),pipe函数的参数是一个包含两个int型整数的数组指针。函数成功时返回0,该函数创建的两个文件描述符fd[0]和fd[1]分别构成管道的两端,fd[0]只能从管道读出数据,fd[1]只能往管道里面写入数据,而不能反过来使用。如果想要实现双向的数据传输,只能使用两个管道。默认情况下,这一对文件描述符都是阻塞的。

1.3、如果管道的写端文件描述符fd[1]的引用计数减少至0,即没有任何进程需要往管道中写入数据,则针对该管道的读端文件描述符发的fd[0]的read操作将返回0;如果管道的读端文件描述符fd[0]的引用计数减少至0,即没有任何进程需要从管道读取数据,则针对该管道的写端文件描述符fd[1]的write操作将会失败,

1.4、管道内部传输的数据是字节流,这和TCP字节流的概念相同。

二、 dup函数和dup2函数

将标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接。

三、sendfile函数

sendfile函数在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了缓冲区和用户缓冲区之间的数据拷贝,效率很高,被称为零拷贝。

ssize_t  sendfile(int out_fd,int in_fd,off_t* offset,size_t count);

in_fd参数是待读出内容的文件描述符,out_fd参数是待写入内容的文件描述符。offset参数指定从读入文件流的哪个位置开始读,如果为空,则使用读入文件流默认的起始位置。count参数指定在文件描述符in_fd和out_fd之间传输的字节数。sendfile成功时返回传输的字节数,失败则返回0并设置error。in_fd必须是指向真实的文件,不能是socket和管道.而out_fd则必须是一个socket。

四、mmap函数和munmap函数

mmap函数用于申请一段内存空间。将这段内存作为进程间通信的共享内存,也可以将文件直接映射到其中。munmap函数则释放由mmap创建的这段内存空间。

void* mmap(void* start,size_t  length,int prot,int flags,int fd,off_t offset)

int  munmap(void* start,size_t length)

start函数允许用户使用某个特定的地址作为这段内存的起始地址。如果他被设置成NULL,则系统自动分配一个*)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值