在追加模式下打开文件:使用open() API

7
我正在尝试使用open() API调用以追加模式打开文件,但是以下代码不起作用!它没有向文件中写入任何内容!这是我的代码:
```python with open('file.txt', 'a') as f: f.write('Hello World!') ```
请注意,上述代码中的文件名应替换为您要打开的实际文件名。

另外,运行您的程序并在strace下输出什么?它是如何失败的? - bdonlan
1
你检查了write返回的值n吗?使用printf将其打印出来,然后检查。在写入文件后,记得要close关闭文件。 - Alok Save
@Pete855217,低级 I/O 操作不具备缓存功能;除非出现电力故障,否则一旦 write() 操作成功完成,数据就会被写入文件。 - bdonlan
运行"./a.out file1"后仍然显示相同的内容,只是检查了n的值,它是-1!:( - JAY G
很遗憾,这个问题的代码是以图像形式呈现的。 - Jean-François Fabre
显示剩余2条评论
1个回答

20

O_APPEND不是单独的模式;它是一个标志。因为O_RDONLY的值为0,所以你好像试图以只读方式打开文件,但却要进行追加操作,这是无意义的。请使用O_WRONLY|O_APPENDO_RDWR|O_APPEND


2
严格来说,使用open而没有任何O_RDONLYO_RDWRO_WRONLY中的一个是未定义行为。在Linux的特定情况下,O_RDONLY = 0,所以它恰好变成了这样。 - bdonlan
据我所知,O_RDONLY 在所有历史实现中都是0。 - R.. GitHub STOP HELPING ICE
POSIX规范将其称为模式;https://pubs.opengroup.org/onlinepubs/007904975/functions/fopen.html。只是说... - Stephen C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接