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 }

转载于:https://www.cnblogs.com/shenshenlei/p/5528247.html

Linux数据写操作改进相关推荐

  1. SAP CRM Product UI是如何判断当前会话发生了数据写操作的

    Created by Wang, Jerry, last modified on Dec 20, 2014 如果我点击了Edit按钮之后,什么操作也不做,直接保存,就会弹出这个"No cha ...

  2. Linux管道的原子性,管道的原子性 linux写操作原子性

    从本质上说,管道也是一种文件,但他又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题 限制管道的大小.实际上,管道是一个固定大小的缓冲区.在Linux中该换冲区的大小为一页,4k 使得他的 ...

  3. Linux I/O操作fsync后数据就安全了么(fsync、fwrite、fflush、mmap、write barriers详解)

    系列文章 Linux I/O操作fsync后数据就安全了么(fsync.fwrite.fflush.mmap.write barriers详解) Linux I/O系列之直接内存(Direct IO) ...

  4. linux flash擦除命令,Linux下flash操作读、写、擦除步骤

    描述 1. 背景介绍 在板上,ZYNQ PL部分通过EMC连接一片NOR FLASH,地址空间如下: 可以看到NOR FLASH的起始地址为0x80000000,这是物理地址,可以把数据存放在以该地址 ...

  5. linux c open flush,ctrl+c以及写操作失败和flush

    .kill命令可以带信号号码选项,也可以不带.如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源.也可以用kill向进程发送特定的信号 ...

  6. mysql修改工资字段_基于Linux的MySQL操作实例(修改表结构,MySQL索引,MySQL数据引擎)...

    基于Linux的MySQL操作实例(修改表结构,MySQL索引,MySQL数据引擎) 前言 本篇是基于Linux下针对MySQL表结构的修改,MySQL索引的操作以及MySQL数据引擎的配置和说明. ...

  7. linux数据库分析报告,写linux数据

    Linux 内存管理机制简介 在 Linux 中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这方面,区别于 Windo ...

  8. linux下分区ntfs,简易教程:Linux下NTFS分区的写操作

    Linux下NTFS分区的写操作只需通过简单点击即可完成. 在你正常的工作中,假如你装的是双系统,其中一个是Winodws系统,而你又在Linux环境下办公,需要用到Windows分区中的某文档资料或 ...

  9. 杭电Matlab与仿真-MATLAB基本语法(二)-数据文件的读/写操作

    数据文件的读/写操作 实验目的 实验内容与要求 实验程序与结果 实验目的 学会matlab数据输入与输出基本操作: 熟悉matlab各种文件的输入输出方法,了解常用的图片及音频文件的输入输出: 掌握用 ...

最新文章

  1. (转)Properties Editor为你解除通过native2ascii进行Unicode转码的烦恼
  2. 【 MATLAB 】使用 MATLAB 求某输入的稳态响应
  3. 【转载】ftp获取文件
  4. 关于不过洋节的通知_蟠桃宫小学关于平安夜、圣诞节安全教育告家长通知书
  5. 小明分享|8ms平台下工程源码分析
  6. dubbo web工程示例_带有Dubbo的Spring Cloud Alibaba
  7. 第5章 Python 数字图像处理(DIP) - 图像复原与重建13 - 空间滤波 - 线性位置不变退化 - 退化函数估计、运动模糊函数
  8. 塔罗牌第五张是什么牌_埃及塔罗牌之第五张牌的细节、释义与改动
  9. oracle12c开发连接jar包ojdbc7
  10. 新浪微博生成超短链接
  11. 域名该怎样选_怎样选择域名?
  12. 使用Springboot+Feign Clients快速搭建REST客户端应用
  13. 杨焘鸣 杨涛鸣:怎样建立自己的人脉网络
  14. 行业云服务——乐视云点播服务试用体验
  15. Julia实现GCC-PHAT算法
  16. Android 9.0 framework 授予安装未知来源应用权限(去掉未知来源弹窗)
  17. 软件测试面试题 | 提BUG相关
  18. K8S中deployment和service案例
  19. MES和ERP在生产过程优化上,谁更胜一筹?
  20. 扫地机器人(简单路径规划)

热门文章

  1. matlab的基础使用
  2. Pycharm中导入的模块名下出现红色波浪线问题
  3. 开始我的Opengl学习之路(rua)
  4. Java中的隐藏实现细节
  5. LeetCode Pow(x, n)
  6. java中的内部接口
  7. 判断闰年 及其某天为这一年的多少天
  8. 听大佬学长RQY报告有感
  9. 安卓性能测试之 adb shell 常用命令
  10. [转载]C#写的NoSQL开源项目/系统(系列)