UNIX 환경 변수-읽기 및 쓰기 기능의 변형

1. readv 및 writev 함수

우리가 자주 사용하는 읽기 및 쓰기 함수는 read () 및 write ()이지만 각 읽기 및 쓰기는 하나의 버퍼에만 읽고 쓸 수 있습니다. 오늘 우리는 한 번만 호출 할 수있는 읽기 및 쓰기 함수를 또 하나 소개합니다. 다중 비 연속 버퍼.

#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 */

둘째, 읽기 및 쓰기 기능

우리 모두 알다시피, (1) 읽기의 반환 값은 필요한 데이터 길이보다 작을 수 있습니다. 파일 끝에 도달하지 않더라도 오류가 아닙니다. 신호 중단 또는 기타 이유 때문일 수 있습니다. . 현재 파일에 계속 액세스해야합니다. (2) 쓰기의 반환 값은 커널 버퍼가 가득 차서 필요한 데이터 길이보다 작을 수 있습니다. 이것은 오류가 아니므로 파일에 계속 액세스해야합니다.

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);

 

추천

출처blog.csdn.net/Chiang2018/article/details/105468159