5

現在、組み込みシステム用のCアプリケーションを作成しています (限られたディスク容量) このシステムでは、いくつかのプロセスがファイルにアクセスし、特定のイベント (ディスク容量不足など) でアプリケーションで削除する必要があります。しかし、他のプロセスは引き続きこれらのファイルに書き込むことができるため、ディスク容量の状況は改善されません。

実際にファイルを削除して、他のプロセスの書き込みアクセスを失敗させる可能性はありますか?

他のプロセスの動作へのアクセスが制限されているため、これらのプロセスの協力が必要ない場合は便利です。

4

2 に答える 2

4

ファイルへのすべての参照が閉じられるまでファイルが実際に削除されないという事実を回避するには、2 つのアイデアが思い浮かびます。

  1. 状況で可能または許可されている場合は、それらのファイルのリンクを解除してから、他のプロセスを再起動してください。
  2. それらのファイルを削除せずに切り捨て/空にします。
于 2013-02-01T13:48:05.577 に答える
-1

私が「他のプロセス」の所有者である場合、サイズが特定のしきい値に達するとすぐに、ログファイルを閉じて名前を変更し、再度開くようにします。このようにして、ログのローテーションを「標準的な」方法で実行できます (例: logrotate ) 。

ただし、既にいくつかのレガシーアプリケーションがあるようです。

この場合、mkfifoを使用して、レガシーアプリケーションを起動する前に、ログ ファイルの代わりに名前付きパイプを作成することをお勧めします。

Cアプリケーションはこれらの特別なファイルから読み取ります。このようにして、たとえば、指定された量を超えないログ ファイルを作成できます。このようにして、たとえばlogrotateを使用できるようになります。

欠点: Cアプリケーションが実行されていない場合、レガシーアプリケーションはシステム コールでスタックしたままになり、接続されていないパイプwrite()に書き込もうとします。

于 2018-07-02T14:16:33.280 に答える