gpt4 book ai didi

c - fopen for write 从不返回 null

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:17 27 4
gpt4 key购买 nike

我正在尝试构建一些简单的东西来测试文件锁定。我尝试打开两个文件进行写入,并且两个调用都已完成。打开文件后显示:“hello world”。

#include <stdio.h>

int main() {
File *fp1 = fopen("./test.txt", "w");
fwrite("hello", 1, 5, fp1);

File *fp2;
if (fp2 = fopen("./test.txt", "w")) {
fwrite(" world", 1, 11, fp2);
}
}

从 fopen 的手册页来看,我的印象是如果一个文件打开进行写入,第二次调用将返回 null。我发现了一个类似的案例:Opening a file using fopen with same flag in C ;根据 Adhip Gupta 的回答,我尝试检查 <= 0 也没有用。

我也尝试使用 fcntl.h 中的 open()。当我预期第二次调用为 -1 时,打印了两个文件描述符。

#include <stdio.h>
#include <fcntl.h>

int main() {
int id1 = open("./text.txt", O_WRONLY);
int id2 = open("./text.txt", O_WRONLY);
printf("%d %d\n", id1, id2);
}

为什么会这样?我在做测试时没有关闭文件流/描述符;这可能是一个原因吗?

最佳答案

这是因为当您使用 "w" 作为 fopen 的打开模式时它会破坏文件的当前内容并从一个全新的文件开始。因此,当您第二次调用 fopen 时,它会成功,因为它不关心文件是否存在,或者其中是否有任何内容。如果路径正确并且您具有打开文件进行写入的正确权限,则 fopen 调用将会成功。

如果你想打开一个只写的文件,如果它已经存在则失败,你必须先自己检查文件是否存在。

关于c - fopen for write 从不返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24796903/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com