5

Cプログラムで一時ファイルを作成し、それにデータを書き込んでから、(execまたはsystemを介して)外部コマンドを呼び出して、作成したファイルに対して処理を実行する必要があります。私は外部コマンドを作成しなかったし、それをプログラムに統合することもできないので、すでに開いている記述子をそれと共有することはできないと思います。したがって、作成された一時ファイルの名前を知る必要があります。

tempname()関数はこれを行いますが、名前を取得してからファイルを開くまでの競合状態が発生する可能性があるため、残念ながら自分自身を使用しないことをお勧めします。また、推奨する関数(tmpfileとmkstemp)はどちらも方法を提供しません。作成されたファイルの実際の名前を確認します。

4

1 に答える 1

5

一時ファイル名がわからないというのは真実でmkstempはありません。このプログラムをコンパイルして実行して、自分自身を確認してください。

#include <stdlib.h>
#include <stdio.h>

int main()
{   
    char fn[] = "/tmp/fileXXXXXX";
    int fd = mkstemp(fn);
    char cmd[200];
    int n = snprintf(cmd, sizeof(cmd), "ls -l %s\n", fn);

    printf("snprintf=>%d\n sizeof(fn)=%d\n", n, sizeof(fn)); // extra info, see comments

    printf("%s\n", cmd);
    return system(cmd);
} 

mkstemp渡したバッファ内のファイル名テンプレートを実際のファイル名に置き換えます。後でこのバッファを使用して、好きなことを行うことができます。

于 2012-12-11T18:38:11.377 に答える