UNIX環境変数-読み取りおよび書き込み関数のバリアント

1.関数readvおよびwritev

私たちがよく使う読み取りと書き込みの関数はread()とwrite()ですが、それぞれの読み取りと書き込みは1つのバッファーに対してのみ読み取りまたは書き込みを行うことができます。複数の非連続バッファ。

#include <sys/uio.h>
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 */

2つ、関数の読み取りと書き込み

ご存知のとおり、(1)読み取りの戻り値が必要なデータ長より短い場合があります。ファイルの終わりに達していない場合でも、これはエラーではありません。信号の中断またはその他の理由が原因である可能性があります。 。この時点で、引き続きファイルにアクセスする必要があります。(2)カーネルバッファがいっぱいであるなどの理由で、書き込みの戻り値が必要なデータ長より短い場合があります。これはエラーではないため、ファイルへのアクセスを続行する必要があります。

読み取りおよび書き込み関数は、要件に達するまで、必要なデータ長に従って読み取りおよび書き込みを続行します(信号の中断により、戻り値が必要な長さにならない場合もあります)。関数宣言は次のとおりです。

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

 

おすすめ

転載: blog.csdn.net/Chiang2018/article/details/105468159