write()调用失败,错误为errno = 28(ENOSPC),设备上没有剩余空间.

我试图通过以下方式处理此错误.当磁盘已满时,我正在执行lseek()将文件指针移动到文件的开头.

我相信现在write()不应该失败,因为现在文件将从顶部被覆盖(文件不会扩展).

但仍然是write()调用失败并出现相同的错误.请解释一下这种行为.

if(errno == ENOSPC)

{

curPos = lseek(gi4LogFd, 0, SEEK_SET);

break;

}

解决方法:

仅仅因为您写入文件的开头并不意味着文件系统将写入磁盘上的相同空间或者根本不分配文件开头的空间.

你可能在文件中有一个漏洞,在这种情况下,写入无论如何都会失败.孔是许多文件系统所做的优化,它们假装文件的一部分存在,而实际上只有很多零,因此这些部分永远不会写入磁盘,只是簿记说文件的特定部分是空的.

您可能有过多的数据到您的文件系统(许多文件系统实际上不会在磁盘上分配空间,直到数据从缓冲区缓存中刷新,这可能是几秒钟,如果不是写入完成后几分钟),在这种情况下写入无论如何都会失败.您获得的ENOSPC实际上可能是因为您已经将文件系统填充到超过100%的容量,并且文件系统代码在尝试刷新您之前执行的写入之前没有发现它.

您可能处于日志记录/日志记录文件系统中,在刷新日志之前不会发生实际的块分配,在这种情况下写入将失败.与缓冲区缓存情况相同的逻辑.

您可能已经耗尽了文件系统上的一些特定的预分配元数据,即使它甚至几乎没有,它也会因ENOSPC而失败.这在今天并不像过去那么普遍.

您的磁盘可能已经发现它的某些部分变坏了并且告诉文件系统不使用这些块并占用空间.

简而言之,不能保证文件系统的行为就像我们可以天真地认为它一旦充满就会发生.除此之外还有其他原因,永远不会填写95%以上的文件系统.几乎所有的文件系统都差不多完全是不确定的.

标签:c-3,linux,error-handling,file

来源: https://codeday.me/bug/20190725/1533668.html

linux文件写入失败 没有空间,write()调用失败:设备上没有剩余空间:ENOSPC处理...相关推荐

  1. HTML显示磁盘容量,导致:IOError:[Errno 28]设备上没有剩余空间:磁盘上有很多空间的’../results/32766.html’...

    我正在运行一个导致上述错误的 Python脚本.这个不寻常的事情是这个脚本在不同的机器上运行,没有任何问题. 不同的是在机器上导致我正在写入外部硬盘驱动器的问题.为了使事情甚至这个脚本,这个脚本已经在 ...

  2. Linux文件写入读取与关闭(二)

    文件的写入 //文件写入所需的头文件 #include <unistd.h> write() 文件写入函数 //write()函数原型 ssize_t write(int fd, cons ...

  3. oracle plsql创建表空间,Oracle在PLSQL Developer上创建表空间和用户脚本 - 龙卷风的日志 - 网易博客...

    Oracle在PLSQL Developer上建立表空间脚本 创建表空间 一. create tablespace MOF_TEMP //name datafile 'D:\oracle\produc ...

  4. 【笔记】Linux 文件写入失败,提示文件系统已满

    在工作中遇到tomcat无日志打印 问题描述: 请求java 接口服务,使用xshelll看不到日志打印. 修改Tomcat 配置文件保存提示失败.文件系统是否已满? 解决过程: 首先使用 df -h ...

  5. 磁盘df看还有剩余空间,但是创建文件时报错,提示磁盘已经满问题解决

    一次在磁盘上建立文件夹的时候,报错提示设备上没有空间.但是df -h查看磁盘 [root@~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda3 19G 2.1G 16G ...

  6. Linux文件(区域)锁函数 -- open()、fcntl()

    一.什么是文件锁定 对于锁这个字,大家一定不会陌生,因为我们生活中就存在着大量的锁,它们各个方面发挥着它的作用,现在世界中的锁的功能都可归结为一句话,就是阻止某些人做某些事,例如,门锁就是阻止除了屋主 ...

  7. php往文件里面写入数据,PHP向文件写入或追加数据

    php向文件里写入或追加数据有两种方法,一种是fopen,还有一种是file_put_contents,本文简要介绍一下两种方法的具体用法,有需要的朋友可以看看. (1)fopen fopen() 函 ...

  8. linux 挂载硬盘_Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令...

    大家好,我是可乐,一个专注原创,乐于分享的程序猿.本系列教程持续更新,可以微信搜索「 IT可乐 」第一时间阅读.回复<电子书>有我为大家特别筛选的海量免费书籍资料 通过前面两篇博客,我们介 ...

  9. Linux文件恢复利器 ext3grep与extundelete

    Linux文件恢复利器 ext3grep与extundelete extundelete-0.2.4.tar.bz2 ext3grep-0.10.2.tar.gz https://www.cnblog ...

最新文章

  1. 如何选择生产行业ERP系统?有哪些价值?
  2. 聊聊Synchronized
  3. Android之----Log详解(Log.v,Log.d,Log.i,Log.w,Log.e)
  4. python如何保证输入键入数字
  5. java 蓝桥杯算法训练 数字三角形(题解)
  6. Vim 还是 Emacs
  7. 《你必须知道的.NET》第五章读书笔记
  8. 使用Eclipse开发Java EE应用
  9. Eclipse汉化教程2021新版
  10. 操作系统启动后 计算机处于 模式,电脑开机出现选择操作系统。怎么办?
  11. 从细菌GFF文件提取CDS序列并转换为氨基酸序列
  12. 中国人为何无缘诺贝尔奖
  13. Python实用工具,pyqt5模块,Python实现自动生成艺术签名的小工具
  14. 微信小程序rich-text富文本图片自适应处理
  15. html格式显示图标异常,HTM或HTML图标变成无法显示和识别的解决方法大全
  16. Shiro权限管理实现(详解)
  17. 2018年第50周-maven脚手架: jc-spring-boot-rest-archetype
  18. _stprintf_s和_stscanf_s
  19. 侯捷文章:初学者要如何学习 C++【我见 我闻我感我思】
  20. Seq2Seq实战——机器翻译

热门文章

  1. 模糊 C 均值聚类(Fuzzy C-Means)
  2. 一款可以链接access数据库的工具
  3. 奥扬科技IPO被终止注册:年营收8亿 苏伟持有67.5%股权
  4. 目标检测随笔1——目标检测简要综述
  5. 项目部署到Linux服务器上 (全)linux服务器安装java mysql 配置
  6. 基于Python+django的 医院排队叫号系统-计算机毕业设计
  7. 思科模拟器实验5:交换机端口聚合配置实验
  8. 当远程连接MySQL数据库的时候显示Can't connect to MySQL server (10060
  9. Impala入门学习与使用详解
  10. TeXstudio编译提示缺少.sty文件