0

tmpnam() を使用して、プロセス 1 で一時ファイル名を生成しています。そのファイルを開き、ファイル名を別のプロセス 2 に送信します。別のプロセス 2 が開き、そのファイルに書き込みます。

しかし、単純に、プロセス 1 が終了したかどうかを知りたいのですが、ファイルは OS によって削除されます。これが起こっているようには見えません。その場合、プロセス1が終了した後にファイルがぶらぶらしないようにするためのオプションは何ですか。

4

2 に答える 2

0

いいえ、プロセスが終了しても、カーネルは開いているファイルを削除しません。

ただし、プロセスが終了する前に開いているファイルを削除することはできます。ファイルを開いたままにしておく限り、ファイルはそこに残ります。ただし、ファイルを名前で開くことはできなくなります。それ以降のアクセスは、開いているファイルハンドルを介してのみ行われます。

例えば

fname="/tmp/tempfilename";
fd=open(fname,O_RDWR);
unlink(fname);
/* fd is still a valid handle that can be written to, read from,
   lseeked on, or passed to a child process.  It will go away
   when the process exits. 
 */
/* Important note:  if you create a temp file like this on a 
   NFS filesystem, there will be a phantom file named something like 
   .nfsfile12983719
   that will stick around until the file descriptor is closed. 
   If you delete this file, it will be re-created.
  */

または、 fd ではなく atmpfile(3)を返すことを除いて、ほぼ同じことを行う which を使用できます。FILE *

于 2013-03-01T22:35:22.097 に答える