2016-04-29 25 views
0

私は今、Linuxシステムコールを学んでいます。O_EXCLに出くわしました。私はLinuxでopenシステムコールについて疑問を抱いていました。私はお互いに関連する2つの具体的な疑問を持っています。ファイルが存在し、ファイルが存在しない場合にのみlinuxでオープンシステムコールを実行する方法?

  1. ファイルが存在する場合のみ(例えば、書き込み)開く方法はありますか?意味この場合、ファイルが存在しなければ開くことはできません。

  2. ファイルが存在しない場合にのみ(たとえば書き込み)ファイルを開く方法はありますか?意味この場合、ファイルが存在する場合、ファイルを開くことができません。これは私が推測するファイルを作成するのと似ていますが、作成して書き込み専用にしたいのですが、ファイルが既に存在する場合は開きたくありません。

Linuxでは、これらの2つのケースに対して完全なopenコマンドを教えてください。

おかげ

注:また、簡単にあなたの答えを説明してください、私はO_EXCLO_WRONLYなどのようなさまざまなオプションフラグを学びましたが、私はこれらの事についていくつか説明ができればそれが良いだろう。

答えて

1

最初のケースでは、O_WRONLYを使用してください。ファイルはO_CREATなしでは作成されません。

2番目のケースでは、O_WRONLY | O_CREAT | O_EXCLを使用します。

+0

ええ、最初のケースは意味があります、私の悪い私はちょうど難しいと思っていた、と私は信じて2番目のケースは、あなたの2番目の文で 'O_WRONLY'との組み合わせで' O_CREAT'だけ、あるいは 'O_EXCL'のみを使用した場合、どうなりますか? – theprogrammer094

-1
  1. statシステムコールを使用して、ファイルが存在するかどうかを調べることができます。次に、存在する場合は、フラグO_WRONLYでファイルをオープンすることができます。

  2. 上記の#1でファイルが存在しないことがわかった場合は、フラグO_WRONLY |を使用してファイルを開くことができます。 O_CREAT。すでにファイルが存在しないことを確認しているので、O_EXCLは必須ではありません。

#1と#2を組み合わせるには、statシステムコールでチェックをスキップして、O_WRONLY | O_CREAT。ファイルがすでに存在していれば、#1のように書き込みに使用されます。それが存在しなければ、それは作成され、#2のように書くために使用されます。

+0

これをしないでください - 競合状態になります。ファイルが 'stat'呼び出しの後で' open'呼び出しの前に削除(または作成)された場合、これは機能しません。 @ viraptorのソリューションははるかに優れています。 –

関連する問題