Linux数据写操作改进

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux数据写操作改进相关的知识,希望对你有一定的参考价值。

  Linux的IO操作中数据的写函数int nwrite = write(int fd,void* buf ,int len)表示向fd文件描述符写入len个字节长度的数据报文,但是这并不能保证真正向内核缓冲区写入了len个数据。比如当内核socket缓冲区不足,小于len个字节,则会只写入其中的一部分,返回nwrite表示实际写入的字节数:因为这种读写方式可以保证数据全部写入缓冲区,因此实际返回值只有-1表示写入错误,size表示完全写入缓冲区。

  为了保证数据写入的完整性,采用循环的写入是非常必要的,下面是参考代码:

 1 #include <unistd.h>
 2 #include <stdio.h>
 3 #include <errno.h>
 4 #include <iostream>
 5 using namespace std;
 6 ssize_t writen(int fd, void* buf, size_t size)
 7 {
 8     char *ptr = (char*)buf;
 9     int nleft = (int)size;
10     int nwritten;
11     while (nleft > 0)
12     {
13         nwritten = write(fd, ptr, nleft);
14         if (nwritten <= 0)
15         {
16             if (nwritten < 0 && errno&EINTR)//发生该错误则继续进行读或写操作
17             {
18                 nwritten = 0;    //write again
19             }
20             else 
21                 return -1; //error
22         }
23         nleft -= nwritten;
24         ptr += nwritten;
25     }
26     return size;
27 }

 

以上是关于Linux数据写操作改进的主要内容,如果未能解决你的问题,请参考以下文章

.net core 3.0 Signalr - 09 待改进&交流

提效小技巧——记录那些不常用的代码片段

linux中怎么查看mysql数据库版本

matlab中灰色模型改进的背景值代码怎么写

改进的日志记录类

有没有办法改进这个查询