2

readlink() 関数を呼び出せるように、ファイル名を取得する必要がある状況があります。私が持っているのは、最初に open() コマンドを介してファイル記述子として格納された整数だけです。問題は、open() コマンドが実行された関数にアクセスできないことです (アクセスした場合、これを投稿することはありません)。open() からの戻り値は、私がアクセスできる構造体に格納されていました。

char buf[PATH_MAX];

char tempFD[2]; //file descriptor number of the temporary file created
tempFD[0] = fi->fh + '0';
tempFD[1] = '\0';

char parentFD[2]; //file descriptor number of the original file
parentFD[0] = (fi->fh - 1) + '0';
parentFD[1] = '\0';

if (readlink(tempFD, buf, sizeof(buf)) < 0) {
    log_msg("\treadlink() error\n");
    perror("readlink() error");
} else 
    log_msg("readlink() returned '%s' for '%s'\n", buf, tempFD);

これは FUSE ファイル システムの一部です。構造体は fi と呼ばれ、ファイル記述子は uint64_t 型の fh に格納されます。このプログラムの実行方法により、リンクされた 2 つのファイルのファイル記述子番号が常に 1 ずつ離れていることがわかっています。少なくともそれが私の作業上の仮定であり、このコードで検証しようとしています。

これはコンパイルされますが、実行すると、ログ ファイルに毎回 readlink エラーが表示されます。ファイル記述子には正しい整数値が格納されていますが、機能していません。

これらの整数値からファイル名を取得する方法を知っている人はいますか? ありがとう!

4

1 に答える 1