gpt4 book ai didi

c++ - 写入文件和 mkdir 竞争条件 C

转载 作者:太空宇宙 更新时间:2023-11-04 04:18:35 26 4
gpt4 key购买 nike

我创建了一个尝试创建目录的函数,然后编写一个简单的文件:

buffer = "Hello world!";
string url = "a/b/c/d/";
string tmp = "";
string done = "";
while((tmp = GetBaseDir(url)).compare("")!=0){
done+=tmp;
mkdir(done.c_str(), 0777);
} // GetBaseDir returns "a/", and changes url to "b/c/d/"
ofstream file;
file.open((url+"file.txt").c_str(),ios::trunc);
file << buffer;
file.close();

正如您所看到的,它只会尝试,如果失败,它就会继续下去。

我读到,如果另一个进程以写权限打开同一文件,“打开”将会失败。但是,这是真的吗?
如果我同时运行此代码的多个实例,mkdir 和写入操作会发生什么情况?

最佳答案

手册页指出,当目录已存在时,mkdir 会失败。它返回 -1 而不是 0。如果忽略这一点,只要 a/b/c/d 实际上是目录,您的代码通常可以正常工作。竞争进程可能会将它们创建为其他内容,从而导致错误。目前尚不清楚为什么使用模式 0777,因为使用 0700 甚至 0770 与特殊组会更好。如果您确定它们始终是目录,那么代码的每个实例都将确保 dir 路径存在,并且唯一的争用将是创建文件。

NAME
mkdir -- make a directory file
SYNOPSIS
#include <sys/stat.h>
int mkdir(const char *path, mode_t mode);
RETURN VALUES
A 0 return value indicates success. A -1 return value indicates an
error, and an error code is stored in errno.
ERRORS
Mkdir() will fail and no directory will be created if:
...
[EEXIST] The named file exists.

关于c++ - 写入文件和 mkdir 竞争条件 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14865338/

26 4 0
文章推荐: HTML 标签!删除新段落</a> </div> <div> 文章推荐: <a class="a-tag" href="/article/22/2780373/detail.html" target="_blank">linux - geniso 与 hfsbless 不工作</a> </div> <div> 文章推荐: <a class="a-tag" href="/article/22/2780371/detail.html" target="_blank">python - 如何绘制任意一点抛物线的斜率(切线)?</a> </div> <div> 文章推荐: <a class="a-tag" href="/article/22/2780370/detail.html" target="_blank">javascript - 防止svg边框渐变颜色</a> </div> </div> <div class="content-p"> <ul class="like-article"> <li> <a class="a-tag" href="/article/21/1946656/detail.html" target="_blank">c++ - C c;之间有什么区别吗?和 C c = C();?</a> <p>#include using namespace std; class C{ private: int value; public: C(){ value = 0; </p> </li> <li> <a class="a-tag" href="/article/23/5503448/detail.html" target="_blank">c++ - C 风格字符串差异 : C/C++</a> <p>这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭</p> </li> <li> <a class="a-tag" href="/article/23/5485746/detail.html" target="_blank">c++ - c\c++ 转换为 C#</a> <p>关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月</p> </li> <li> <a class="a-tag" href="/article/23/5375209/detail.html" target="_blank">c# - C、C++、C# 的功能测试工具</a> <p>除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟</p> </li> <li> <a class="a-tag" href="/article/22/2899621/detail.html" target="_blank">c# - C/C++/C# 在监视器上设置窗口位置</a> <p>我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最</p> </li> <li> <a class="a-tag" href="/article/22/2708752/detail.html" target="_blank">c# - C/C++/C#中的DES实现</a> <p>我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实</p> </li> <li> <a class="a-tag" href="/article/21/2017140/detail.html" target="_blank">c# - 在条件中使用赋值是否安全? C/C++、C#</a> <p> 很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1</p> </li> <li> <a class="a-tag" href="/article/20/1641822/detail.html" target="_blank">c++ - C/C++/C# 强制窗口在最上面</a> <p>有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha</p> </li> <li> <a class="a-tag" href="/article/19/1183625/detail.html" target="_blank">c# - 套接字服务器应用程序的选择 : C/C++ or C#</a> <p>假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如</p> </li> <li> <a class="a-tag" href="/article/14/264754/detail.html" target="_blank">c++ - C/C++ 运行时库和 C/C++ 标准库的区别</a> <p>你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同</p> </li> <li> <a class="a-tag" href="/article/14/263124/detail.html" target="_blank">c++ - &C::c 和 &(C::c) 有什么区别?</a> <p>下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public: </p> </li> <li> <a class="a-tag" href="/article/23/5470044/detail.html" target="_blank">c++ - 什么 C++(通用 (c/c++) 与 (通用 c)/c++ )</a> <p>很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关</p> </li> <li> <a class="a-tag" href="/article/23/4786483/detail.html" target="_blank">c# - 通过网络在 C/C++ 服务器、C/C++ 和 C# 客户端之间发送数据结构</a> <p>我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用</p> </li> <li> <a class="a-tag" href="/article/22/2940390/detail.html" target="_blank">c# - C/C++ - 如何将 Buffer.BlockCopy (C#) 转换为 C/C++</a> <p>我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co</p> </li> <li> <a class="a-tag" href="/article/22/2189589/detail.html" target="_blank">c++ - C/C++ - 对其他人隐藏 C 或 C++ 函数代码</a> <p>我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在</p> </li> <li> <a class="a-tag" href="/article/21/1944188/detail.html" target="_blank">c# - 在托管代码(C++、C、C++/CLI、C#)中使用非托管代码时处理错误</a> <p>我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,</p> </li> <li> <a class="a-tag" href="/article/20/1683295/detail.html" target="_blank">c# - C#、C/C++ 或 Objective-C 中的眼动追踪库</a> <p> 关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。</p> </li> <li> <a class="a-tag" href="/article/23/7553279/detail.html" target="_blank">c++ - C/C++/Objective-C 文本识别库</a> <p>已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为</p> </li> <li> <a class="a-tag" href="/article/23/5496727/detail.html" target="_blank">c# - 将 C/C++ 函数导入 C#</a> <p>我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData { </p> </li> <li> <a class="a-tag" href="/article/23/5444023/detail.html" target="_blank">c - C语言中 "c -= --c - c++;"的结果应该是什么?</a> <p>这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6</p> </li> </ul> </div> </div> <div class="resource col-xs-3 col-sm-3 col-md-3 col-lg-3"> <div class="content-p content-p-comment"> <div class="phone-current phone-current-float"> <img alt="" src="/images/phone/manphone.jpeg"> </div> <div class="phone-current-float phone-current-style"> 太空宇宙 </div> <div class="phone-current-summary"> <span><strong>个人简介</strong></span> <p> 我是一名优秀的程序员,十分优秀! </p> </div> </div> <div class="content-p content-p-comment"> <article class="p-list"> <div class="art-margin" style="border-bottom: 1px solid #f3f0f0; padding-bottom: 5px;"> <strong>作者热门文章</strong> </div> <ul class="recomment-list-user"> <li><a class="a-tag" href="/article/22/2177999/detail.html" target="_blank">android - 多次调用 OnPrimaryClipChangedListener</a></li> <li><a class="a-tag" href="/article/22/2177998/detail.html" target="_blank">android - 无法更新 RecyclerView 中的 TextView 字段</a></li> <li><a class="a-tag" href="/article/22/2177997/detail.html" target="_blank">android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0</a></li> <li><a class="a-tag" href="/article/22/2177996/detail.html" target="_blank">android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色</a></li> </ul> </article> </div> <div class="content-p content-p-comment"> <article class="p-list"> <div class="art-margin" style="border-bottom: 1px solid #f3f0f0; padding-bottom: 5px;"> <strong>滴滴打车优惠券免费领取</strong> </div> <img alt="滴滴打车优惠券" src="/images/ad/didiad.png" width="210px" onclick="window.open('/ad/didi', '_blank')"> </article> </div> <div class="content-p content-p-comment"> <article class="p-list"> <div class="art-margin" style="border-bottom: 1px solid #f3f0f0; padding-bottom: 5px;"> <strong>全站热门文章</strong> </div> <ul class="recomment-list-user"> <li><a class="a-tag" href="/article/92/8827174/detail.html" target="_blank">如何使用Flask编写一个网站</a></li> <li><a class="a-tag" href="/article/92/8827173/detail.html" target="_blank">Qml中的那些坑(七)---ComboBox嵌入Popup时,滚动内容超过其可见区域不会关闭ComboBox弹窗</a></li> <li><a class="a-tag" href="/article/92/8827172/detail.html" target="_blank">鸿蒙NEXT开发案例:指尖轮盘</a></li> <li><a class="a-tag" href="/article/92/8827171/detail.html" target="_blank">使用ob_tools包收集分析oceanbase数据库oracle租户缓慢sql语句</a></li> <li><a class="a-tag" href="/article/92/8827170/detail.html" target="_blank">Quartz集群增强版_00.Howtouse?(如何使用)</a></li> <li><a class="a-tag" href="/article/92/8827169/detail.html" target="_blank">开发人员,千万不要去碰那该死的业务参数,无论什么时候!</a></li> <li><a class="a-tag" href="/article/92/8827168/detail.html" target="_blank">C#/.NET/.NETCore技术前沿周刊|第12期(2024年11.01-11.10)</a></li> <li><a class="a-tag" href="/article/92/8827167/detail.html" target="_blank">2024ICPC武汉邀请赛题解更新至8题</a></li> <li><a class="a-tag" href="/article/92/8827166/detail.html" target="_blank">【项目场景】请求数据时测试环境比生产环境多花了1秒是怎么回事?</a></li> <li><a class="a-tag" href="/article/92/8827165/detail.html" target="_blank">使用wxpython开发跨平台桌面应用,基类列表窗体的抽象封装处理</a></li> </ul> </article> </div> </div> </div> </div> <div class="foot-font" style="border-top: 1px solid #f3f0f0; margin: auto; padding: 15px; background-color: #474443" align="center"> <a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank"><span class="color-txt-foot">Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号</span></a> <br/> <a href="/" target="_blank"><span class="color-txt-foot">广告合作:1813099741@qq.com</span></a> <a href="http://www.6ren.com" target="_blank"><span class="color-txt-foot">6ren.com</span></a> </div> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d1cb9c185f1642d6f07e22cafa330c45"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d46c26b2162aface49b8acf6cb7025e1"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>