为什么删除目标文件后写入文件描述符会成功?

2024-04-26

code:

int main(int argc, char **argv)
{
    int fd = open("test.txt", O_CREAT|O_RDWR, 0200|0400);
    if(fd == -1)
    {
        printf("failure to oepn");
        exit(-1);
    }
    int iRet = write(fd, "aaaaaaaaaa", 10);

    if(iRet == -1)
    {
        printf("failure to writer");
        exit(-1);
    }
    sleep(10);
    printf("You must remove");
    iRet = write(fd, "bbbbbbbbbb", 10);

    if(iRet == -1)
    {
        printf("failure to after writer");
        exit(-1);
    }

   exit(0);
}

在sleep()期间,你删除了test.txt,但是进程写入成功了!为什么? 如果是一个日志“Singleton”实例,则删除磁盘上的文件。写入成功,但什么也得不到。

class log
{
public:
    void loggerWriter(std::string str);
    int fd;
};

log::log(std::string filename):fd(-1)
{
    fd = open(filename.c_str(), O_CREAT|)
    //...
}

log::loggerWriter(std::string str)
{
    writer(fd, str.c_str(), str.size());
}

int main()
{
    log logger("text.txt");
    //...
    //I want to know the text.txt the text.txt have delete on the disk or not.
    //if delete i can create another file to log. 
}

“取消链接”无法解决这个问题。


The 取消链接的手册页(2) http://www.kernel.org/doc/man-pages/online/pages/man2/unlink.2.html明确指出:

unlink()从文件系统中删除名称。如果这个名字是 到文件的最后一个链接,并且没有进程打开该文件,该文件是 已删除,并且其所使用的空间可供重复使用。

如果该名称是文件的最后一个链接,但任何进程仍然有 文件打开该文件将一直存在,直到最后一个文件 引用它的描述符已关闭.

As caf https://stackoverflow.com/users/134633/caf评论中很好地指出:

write() 成功,因为它写入了文件,该文件仍然 尽管它不再有名字,但此时仍然存在。文件名 文件本身是不同的,并且有不同的生命周期。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么删除目标文件后写入文件描述符会成功? 的相关文章

  • lambda 始终返回“1”

    有这样的代码 include
  • 将信号/槽(QObject)添加到 QGraphicsItem:性能受到影响?

    我想将信号 槽添加到 QGraphicsItem 以便我可以从另一个线程访问 QGraphicsItemObjects 我知道有两个选项 使用 QGraphicsObject 或从 QObject 和 QGraphicsItem 继承 使用
  • 我可以在 WinRT / Windows 8 Store 应用程序中绑定 DynamicObject

    我有以下代码 public class MyClass DynamicObject INotifyPropertyChanged Dictionary
  • 将文件扩展名与应用程序关联

    我编写了一个编辑特定文件类型的程序 我想为用户提供在启动时将我的应用程序设置为该文件类型的默认编辑器的选项 因为我不需要安装程序 我尝试编写一个可重用的方法 通过向 HKEY CLASSES ROOT 添加一个键来为我关联一个文件 最好在任
  • 如何使构造函数只能由基类访问?

    如果我想要一个只能从子类访问的构造函数 我可以使用protected构造函数中的关键字 现在我想要相反的 我的子类应该有一个构造函数 该构造函数可以由其基类访问 但不能从任何其他类访问 这可能吗 这是我当前的代码 问题是子类有一个公共构造函
  • LockBits 性能关键代码

    我有一个方法需要尽可能快 它使用不安全的内存指针 这是我第一次尝试这种类型的编码 所以我知道它可能会更快
  • 相当于一个允许重复键的排序字典

    我需要一个数据结构 可以通过与对象关联的浮动键对对象进行排序 从低到低的在前 问题是键代表成本 所以经常有重复 我不关心这一点 因为如果两个具有相同的成本 我只会抓住第一个 因为它没有区别 问题是编译器抱怨 是否有一种数据结构的行为方式相同
  • EntityFramework:“参数值超出范围。”

    我在 EntityFramework 模型优先 中保存小数时遇到问题 在我的 EDMX 中 我声明我的属性为 Decimal 30 10 然后我尝试保存该数字 1215867935736100000 结果是 Parameter value
  • 使用工作表作为数据源的 VSTO Excel 的简单示例

    我想我遇到了 最简单的答案是最难找到的答案 的情况 而且我还没有遇到过任何搜索能够以直接的方式给我这个答案 这是为了Excel 2010 and VS 2010在现有 VSTO C 项目中 我有一个 Excel 工作表 其中包含 4 列数据
  • 如何从 UNC 中提取服务器名称

    谁能告诉我如何从 UNC 中提取服务器名称 ex 服务器名称 目录 目录 编辑 我很抱歉 但看起来我需要澄清一个错误 路径实际上更像是 服务器名 d 目录 我知道这可能会改变一些事情 怎么样Uri Uri uri new Uri serve
  • 如何测试 PARTIAL 视图在 C# ASP .NET MVC 中呈现

    我有一个视图 它内部有部分视图渲染 div class partialViewDiv Html RenderPartial partial Model SomeModelProperty div 和一个返回此视图的控制器 public Ac
  • 恢复多个监视器的窗口大小/位置

    许多帖子都涉及恢复 WinForm 位置和大小 例子 www stackoverflow com questions 92540 save and restore form position and size http www stacko
  • .NET 查询字符串值的正则表达式

    我需要从 Url PathAndQuery 中删除任何 id SomeValue 其中 SomeValue 可以是整数或字符串 它后面可能有也可能没有另一个 符号 所以它可能是 somepage aspx cat 22 id SomeId
  • 我应该在查询时调用 ToListAsync()

    不久前 我开始接触 C 并正在寻找一些如何编写代码的最佳实践 现在 我正在使用 EF Core 并具有以下代码 var details dbContext Details Where x gt x Name Button foreach v
  • 在 Winforms 中,PreviewKeyDown() 从未针对任何键触发

    我最初试图让我的程序获取箭头键 上 下 左 右 的输入 但发现在 KeyDown 中这些键从未出现过 后来我发现我可以通过进入 PreviewKeyDown 函数并设置来启用箭头键 e IsInputKey true 及其周围的任何条件和逻
  • gcc总是做这种优化吗? (公共子表达式消除)

    作为示例 假设表达式sys gt pot atoms item gt P kind mass在循环内求值 循环只改变item 因此表达式可以简化为atoms item gt P kind mass通过将变量定义为atoms sys gt p
  • 串行端口轮询和数据处理

    我正在尝试通过微控制器从传感器的多个串行端口读取数据 每个串口将接收超过2000个测量值 每个测量值7个字节 全部为十六进制 而且他们同时开火 现在我正在从 4 个串行端口进行轮询 另外 我将每个测量值转换为字符串并将其附加到字符串构建器
  • 自定义编译器警告

    在 Net 中使用 ObsoleteAtribute 时 它 会向您发出编译器警告 告诉您该对象 方法 属性已过时 应使用其他内容 我目前正在从事一个需要大量重构前员工代码的项目 我想编写一个自定义属性 可用于标记方法或属性 这些方法或属性
  • 接口作为类型约束和接口作为参数之间的区别?

    如果我想创建一个采用实例的方法IList作为参数 或任何其他接口 但让我们使用IList作为一个例子 我可以创建一个带有类型约束的通用方法 例如 public static void Foo1
  • 如何检查多个变量是否等于同一值?

    如何比较多个项目 例如 我希望检查所有变量 A B 和 C 是否都等于字符 X 或所有三个变量都等于 O 如果其中 2 个为 X 1 个为 O 则应返回 false I tried if A B C X A B C O Do whateve

随机推荐

  • MySQL 唯一 id 或组合 id

    我的项目和开发人员计划的结构如下 developer table id developer name etc project table id project name etc developer project table 因为一个开发人
  • php zlib:如何从字符串变量动态创建内存中的zip文件?

    这就是我需要的 a array folder gt anyfolder filename gt anyfilename filedata gt anyfiledata 我需要使用 a 中的压缩数据创建一个变量 zip 并将此 zip 输出到
  • Sass 更改监视间隔,更频繁地编译

    我正在使用 sass 将 scss 编译为 css 每次保存后 大约需要 15 20 秒才能编译为 scss 文件到 css 因此我需要刷新几次才能看到预期结果 有没有办法告诉 Sass 更频繁地检查更改 这是我使用的命令 sass wat
  • C# 中的随机数 [重复]

    这个问题在这里已经有答案了 可能的重复 随机数生成器没有按我计划的方式工作 C https stackoverflow com questions 767999 random number generator not working the
  • SharePoint 404 页面

    最好的位置是在 web config customError 部分中为 SharePoint 设置 404 错误页面 还是网站集 Web 应用程序上有配置设置 请阅读这个博客 http blogs msdn com jingmeili ar
  • 退出 glutFullScreen()

    我不明白为什么当我按 f 时它进入全屏但不退出全屏 在这个方法的开头我已经设置了bool fullscreen false 这是我的切换代码 case f toggle screenmode if fullscreen glutFullSc
  • 如何在 r 中绘制 LDA 的双标图?

    我使用该函数进行了线性判别分析lda 来自 MASS 包 现在我会尝试绘制像 ade4 包 forLDA 中那样的双标图 你知道我该怎么做吗 如果我尝试使用biplot 功能不起作用 例如 如果我使用 Iris 数据并制作 LDA dis2
  • 如何在 Scala Slick 中运行补丁/部分数据库更新?

    我们想运行补丁 部分UPDATE使用 Slick 3 0 0 以便我们只修改记录中的某些字段 确切地说哪些字段将被更新只有在运行时才知道 例如 对于一个REST PATCH request http restcookbook com HTT
  • C++11 中引入的可选固定宽度整数类型的支持状态

    C 11终于引入了固定宽度整数类型
  • 如果单元格为空白,如何停止公式?

    如果左侧单元格中没有数据 如何停止公式运行 我正在尝试弄清楚如何使用固定时间和动态时钟来显示经过的时间 我的固定时间在 Cell D5 中 动态时钟在 Cell 中J4 附图 为了计算出 经过的时间 我的公式如下 J4 D5 效果很好 但是
  • d3.js:是否可以通过键而不是索引来进行转换?

    我有不同长度的数据数组 x值 年 是有限年数的一部分 例如 var data Year 2008 Value 5 Year 2009 Value 6 or var data Year 2007 Value 8 Year 2009 Value
  • WordPress 操作钩子未触发(wpforms)

    最终完成了一个包含 WordPress 网站的项目 我正在尝试将 WPforms 制作的表单中的数据发布到外部 API 不是一个 WordPress 专家 但我读到我可以通过编写自己的插件来连接其他插件的操作 这是我的插件
  • Ember.js + Mirage:在集成测试中拉取模拟关系

    我有一个使用的组件this get model property 并且它按预期工作 对于我的集成测试 我使用 Mirage 它适用于我的所有其他测试 包括集成测试 但是当我测试这个特定组件时 我得到 TypeError Cannot rea
  • 使用 goto 跳过变量声明?

    我在读C 编程 现代方法由 K N King 学习 C 编程语言 并指出goto语句不得跳过可变长度数组声明 但现在的问题是 为什么goto跳转允许跳过 固定长度数组声明和普通声明吗 更准确地说 根据 C99 标准 此类示例的行为是什么 当
  • onErrorResume 和 doOnError 的区别

    Spring项目Reactor中 有什么区别onErrorResume and doOnError 我什么时候应该每个人 onErrorResume 当上游发生异常时提供回退流 doOnError 副作用运算符 假设您想记录上游发生的错误
  • 有没有一种方法可以在不登录用户的情况下使用 Adob​​e Creative SDK?

    Aviary 不需要用户进行任何登录 我想使用它 但 Creative SDK 要求用户登录 Adob e 帐户 我只想能够在设备上进行简单的编辑 这可能吗 图像编辑器和授权目前 Creative SDK 图像编辑器组件不需要登录 并且未来
  • python pandas 特殊字符作为分隔符

    我有一个带有特殊字符 作为分隔符的文本文件 我在 read csv 命令中复制粘贴了这个特殊字符作为分隔符 但出现以下错误 ParserWarning Falling back to the python engine because th
  • 前摄器和异步写入

    升压asio http www boost org doc libs 1 46 1 doc html boost asio html实现基于前摄器设计模式ACE前摄器 http www cse wustl edu schmidt PDF p
  • 运行 .NET Core API Linux 环境启动配置文件

    所以我试图让 NET Core API 应用程序在不同的环境设置下运行 我一直在阅读文档 据我所知 我已按照说明进行操作 然而 当我在 VS 之外运行该服务时 由于无法找到连接字符串 它会崩溃 我显然错过了一些基本的东西 我已经设置了两个配
  • 为什么删除目标文件后写入文件描述符会成功?

    code int main int argc char argv int fd open test txt O CREAT O RDWR 0200 0400 if fd 1 printf failure to oepn exit 1 int