2

新しいファイルに書き込むために、私は次のことを行います:

// some code 
...

 pfd[i][0] = open(argv[j+1],O_CREAT|O_WRONLY,0600);

質問:

  1. との使用に違いはありますopenfopen

  2. モードopenで既存のファイルを開くためにどのように使用できますか?append

4

4 に答える 4

2
  1. openPOSIXシステム用です。他のシステムへの移植はできません。fopenはC標準の一部であるため、すべてのC実装で機能します。openを返すファイル記述子をfopen返す違いを無視していますFILE *

  2. O_APPEND追加モードで開くために使用します。

于 2012-05-22T15:59:18.897 に答える
1
  1. 違いは、open移植性のないPOSIX関数であり、fopen移植性のある標準のC関数であるということです。
  2. 追加モードを使用するためO_APPENDに呼び出すときに指定します。open
于 2012-05-22T15:58:53.790 に答える
1

使用するO_APPEND

POSIXドキュメントopen()の説明からの引用

O_APPEND
設定されている場合、ファイルオフセットは、各書き込みの前にファイルの最後に設定されます。

于 2012-05-22T15:59:35.773 に答える
1

1)はい。違いがあります:バッファ付きまたはバッファなしのI/O。
open()RAWファイルハンドルを提供します(プログラムとファイルシステム内のファイルの間にバッファはありません)。

fopen()ストリームバッファモードでファイルを操作する権限を与えます。たとえば、データを1行ずつ(\ 0)読み取り/書き込みできます。

、、、、のような関数を使用するとfprintf()、 大きな違いがわかります。fscanf()fgets()fflush()

ps:fopen()より良くはありませんopen()。それらは異なるものです。ストリームバッファ(fopen)が必要な場合もあれば、バイトごとの作業(open)が必要な場合もあります。

ストリームに関する優れたリファレンスは次のとおりです。http ://www.cs.cf.ac.uk/Dave/C/node18.html#SECTION001820000000000000000

2)追加モードで開くには、O_APPENDフラグを追加します。

open(argv[j+1],O_CREAT|O_APPEND|O_WRONLY,0600);

于 2012-05-22T16:23:02.983 に答える