对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或create返回的文件描述符表示该文件,将其作为参数传给read或write函数。

write函数

   write函数定义如下:

#include <unistd>
ssize_t write(int filedes, void *buf, size_t nbytes);
// 返回:若成功则返回写入的字节数,若出错则返回-1
// filedes:文件描述符
// buf:待写入数据缓存区
// nbytes:要写入的字节数

  同样,为了保证写入数据的完整性,在《UNIX网络编程 卷1》中,作者将该函数进行了封装,具体程序如下:

 1 ssize_t                        /* Write "n" bytes to a descriptor. */
 2 writen(int fd, const void *vptr, size_t n)
 3 {
 4     size_t nleft;
 5     ssize_t nwritten;
 6     const char *ptr;
 7 
 8     ptr = vptr;
 9     nleft = n;
10     while (nleft > 0) {
11         if ( (nwritten = write(fd, ptr, nleft)) <= 0) {
12             if (nwritten < 0 && errno == EINTR)
13                 nwritten = 0;        /* and call write() again */
14             else
15                 return(-1);            /* error */
16         }
17 
18         nleft -= nwritten;
19         ptr   += nwritten;
20     }
21     return(n);
22 }
23 /* end writen */
24 
25 void
26 Writen(int fd, void *ptr, size_t nbytes)
27 {
28     if (writen(fd, ptr, nbytes) != nbytes)
29         err_sys("writen error");
30 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-19
  • 2022-01-22
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-30
猜你喜欢
  • 2022-02-20
  • 2022-12-23
  • 2022-01-06
  • 2022-12-23
  • 2022-02-20
相关资源
相似解决方案