博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UNIX环境变量--读写函数变体
阅读量:2194 次
发布时间:2019-05-02

本文共 766 字,大约阅读时间需要 2 分钟。

一、函数readv及writev

我们经常使用的读写函数是read()和write(),但是每次读写只能读入或者写入到一个缓冲区,今天介绍另一种读写函数,可以一次调用,读写多个非连续缓冲区。

#include 
ssize_t readv(int fd,const struct iovec*iov,int iovcnt);ssize_t writev(int fd,const struct iovec*iov,int iovcnt);/* 参数说明: fd:操作的文件描述符 iov:操作的缓冲区数组首地址 iov的结构体内容 : struct iovec{ void* iov_base;//缓冲区地址 ssize_t iov_len;//缓冲区长度 } iovcnt:表示iov结构体的数目。返回值:成功则返回已读或者已写的字节数,若出错,则返回-1 */

二、函数readn和writen

众所周知,(1)一次read的返回值可能少于所要求的数据长度,即使没有到达文件尾,这不是一个错误,可能是因为信号中断,或者其他原因,此时我们应该继续访问文件。(2)一次write的返回值可能少于所要求的数据长度,可能因为内核缓冲区满等原因,这也不是一个错误,我们也应该继续访问文件。

而函数readn和writen将按照你所要求的数据长度不断读写,直到达到你的要求(信号中断也可能导致返回值不是要求长度)。函数声明如下:

#include "apue.h"ssize_t readn(int fd,void* buf,ssize_t nbytes);ssize_t writen(int fd,void* buf,ssize_t nbytes);

 

转载地址:http://nwpub.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】8-String to Integer (atoi)
查看>>
【LEETCODE】14-Longest Common Prefix
查看>>
【LEETCODE】38-Count and Say
查看>>
【LEETCODE】278-First Bad Version
查看>>
【LEETCODE】303-Range Sum Query - Immutable
查看>>
【LEETCODE】21-Merge Two Sorted Lists
查看>>
【LEETCODE】231-Power of Two
查看>>
【LEETCODE】172-Factorial Trailing Zeroes
查看>>
【LEETCODE】112-Path Sum
查看>>
【LEETCODE】9-Palindrome Number
查看>>
【极客学院】-python学习笔记-Python快速入门(面向对象-引入外部文件-Web2Py创建网站)
查看>>
【LEETCODE】190-Reverse Bits
查看>>
【LEETCODE】67-Add Binary
查看>>
【LEETCODE】7-Reverse Integer
查看>>
【LEETCODE】165-Compare Version Numbers
查看>>
【LEETCODE】299-Bulls and Cows
查看>>
【LEETCODE】223-Rectangle Area
查看>>
【LEETCODE】12-Integer to Roman
查看>>
【学习方法】如何分析源代码
查看>>
【LEETCODE】61- Rotate List [Python]
查看>>