2

PostScript ファイルを変更するユーティリティを作成することに興味があります。ファイルをトラバースし、ページ数とサイズについて特定の決定を下し、出力をファイルまたは stdout に書き込み、PostScript コードに特定の変更を加える必要があります。

この場合、*NIX システムでファイル処理を処理するにはどうすればよいでしょうか? 私は C でのパイプとフォークにかなり慣れていません。ファイルを直接読み取る場合、おそらく入力ファイルを前後にシークできると理解していますが、入力がプログラムに直接パイプされている場合、私はたとえば、入力がネットワークストリームである可能性があるため、入力の先頭に単純に巻き戻すことはできませんか?

PS ファイル全体をメモリに保存するのではなく、ページ分析の最初のパスを実行している間に入力をディスクにバッファリングし、一時ファイルから再度読み取り、出力を生成する方が理にかなっているように思われます。一時ファイルを削除します。それが実行可能な解決策である場合、そのようなファイルを *NIX システムに保存するのに適した場所はどこでしょうか? このようなコードがどれほど安全かはわかりません。同じサーバー上の複数のユーザーがプログラムを使用する可能性があります。特定のユーザーアカウントに固有の一時ディレクトリのどこかにファイルを保存し、ディスク上の一時ファイルにかなり一意の名前を付ける必要があるようです。

このクレイジーで不可解なファイル処理の世界に関するヒントや指針をいただければ幸いです。

4

3 に答える 3

4

mkstemp(3)一時ファイルの作成に使用します。並行性の問題を処理します。mmap(2)ファイル内を自由に移動できます。

于 2010-11-13T18:10:22.953 に答える
1

入力がプログラムに直接パイプされている場合、入力がたとえばネットワークストリームである可能性があるため、入力の先頭に単純に巻き戻すことはできません。正しいですか?

そのとおりです。ファイルに対してのみランダム アクセスを実行できます。

ファイルを読み取ると、ファイル自体をメモリに保持することなく、後でファイルの特定の部分を検索するために使用できるメタデータのテーブルを作成できる可能性があります。

于 2010-11-13T18:07:44.507 に答える
1

/tmp は UNIX システムの一時ディレクトリです。FHSによって指定されています。システムの再起動時に消去されます。

それ以上の永続的なデータストレージが必要な場合は、再起動後に消去されない /var/tmp があります。また、FHS。

http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

于 2010-11-13T18:07:52.047 に答える