第14章 高级I/O函数

时间:2022-05-03
本文章向大家介绍第14章 高级I/O函数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

设置套接字时间限制: 1、使用alarm函数和SIGALRM信号 2、使用由select提供的时间限制

3、使用SO_RCVTIMEO和SO_SNDTIMEO套接字选项

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
#include<sys/uio.h>

struct iovec
{
void* iov_base;
size_t iov_len;
};

ssize_t readv(int filedes, const struct iovec* iov, int iovcnt);
ssize_t writev(int filedes, const struct iovec* iov, int iovcnt);
#include <sys/types.h>
#include <sys/socket.h>

ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t send(int sockfd, const void *buf, size_t len, int flags);

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                const struct sockaddr *dest_addr, socklen_t addrlen);

struct msghdr
{
   void      *msg_name;       /* optional address */
   socklen_t   msg_namelen;    /* size of address */
   struct iovec  *msg_iov;        /* scatter/gather array */
   size_t     msg_iovlen;     /* # elements in msg_iov */
   void      *msg_control;    /* ancillary data, see below */
   size_t     msg_controllen; /* ancillary data buffer len */
   int      msg_flags;      /* flags on received message */
};			
ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);

struct cmsghdr {
    socklen_t cmsg_len;    /* data byte count, including header */
    int       cmsg_level;  /* originating protocol */
    int       cmsg_type;   /* protocol-specific type */
    /* followed by unsigned char cmsg_data[]; */
};
struct cmsghdr *CMSG_FIRSTHDR(struct msghdr *msgh);
struct cmsghdr *CMSG_NXTHDR(struct msghdr *msgh, struct cmsghdr *cmsg);
size_t CMSG_ALIGN(size_t length);
size_t CMSG_SPACE(size_t length);
size_t CMSG_LEN(size_t length);
unsigned char *CMSG_DATA(struct cmsghdr *cmsg);