如果文件存在且仅当文件不存在时,如何在linux中执行开放系统调用?

时间:2016-04-29 00:20:14

标签: linux system-calls

我正在学习Linux系统调用,我遇到了O_EXCL,我对linux中的open系统调用几乎没有疑问。我有两个特定的疑问,彼此相关。

  1. 如果文件存在,如何打开文件(如写作)?这意味着在这种情况下我不能打开文件,如果它不存在。

  2. 如果文件不存在,如何打开文件(如写作)?意思是在这种情况下我不应该打开文件(如果存在)。这类似于我想创建一个文件,但我只是想创建它并打开它进行写入,如果文件已经存在,我不想打开它。

  3. 那么请你在Linux中为这两个案例提供完整的open命令吗?

    由于

    注意:另外请简要解释一下你的答案,我确实了解了O_EXCLO_WRONLY等不同的选项标记,但如果能对这些事情做一些解释会更好。

2 个答案:

答案 0 :(得分:1)

在第一种情况下,只需使用O_WRONLY - 如果没有O_CREAT,则不会创建该文件。

在第二种情况下,您使用O_WRONLY | O_CREAT | O_EXCL

答案 1 :(得分:-1)

  1. 您可以使用stat系统调用来查明文件是否存在。然后,如果它存在,您可以使用标志O_WRONLY打开该文件。

  2. 如果您在上面的#1中发现该文件不存在,您可以使用标志打开它,O_WRONLY | O_CREAT。由于您已确保该文件不存在,因此不需要O_EXCL。

  3. 您可以通过跳过使用stat系统调用的检查并使用O_WRONLY打开文件来组合#1和#2。 O_CREAT。如果文件已经存在,它将用于写入#1。如果它不存在,它将被创建并用于写入,如#2。