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

How to perform open system call in linux only if file exists and only if file doesn't exists?

我现在正在学习Linux系统调用,我遇到了O_EXCL,我对linux中的open系统调用几乎没有疑问。我有两个相互关联的具体疑问。

  • 仅当文件存在时如何打开文件(例如写入)?这意味着在这种情况下,如果文件不存在,我应该无法打开它。

  • 仅当文件不存在时如何打开文件(例如写入)?这意味着在这种情况下我应该无法打开文件,如果它存在的话。这类似于我猜想创建一个文件,但我只想创建它并打开它以进行写入,如果文件已经存在,我不想打开它。

  • 那么你能给我完整的 open 命令在 Linux 中这两种情况吗?

    谢谢

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


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

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


  • 您可以使用 stat 系统调用来确定文件是否存在。然后,如果它存在,您可以打开带有标志的文件,O_WRONLY.

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

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