-3

ファイル上のすべてのハード リンクを C で書き出す必要があります。その方法がわかりません。bash コマンドを呼び出すことも 1 つの可能性ですが、どのコマンドを呼び出すのでしょうか?

与えられた: ファイル名 'foo.txt'

検索: 「foo.txt」へのハードリンクであるすべてのファイル

4

2 に答える 2

1

他の答えは明らかにコマンドに依存していlsますが、これはコマンドなしで実行できます。lstatファイル (inode) 情報をstruct stat. 例えば:

#include <sys/stat.h>
// ... inside main ...
struct stat stats;
if (argc == 2)
  lstat(argv[1], &stats)
printf("Link count: %d\n", stats->st_nlink);

lstat続行する前に、失敗したかどうか ( ) も確認する必要がありif (lstat(argv[1], &stats) != 0) {...}ます。このための出発点を提供するだけです。


引数として1つのファイルだけではなく、ディレクトリ内のすべてのファイルに関連するリンクを見つけたい場合に備えて、さらにコードを追加します。

DIR *dp; 
struct stat stats;
// ...
if ((dp = opendir(".")) == NULL) {
    perror("Failed to open directory");
    exit(-1);
}

while ((dir = readdir(dp)) != NULL) {
    if (lstat(dir->d_name, &stats) != 0) {
        perror("lstat failed: ");
        exit(-1);
    }

    printf("Link count: %d\n, stats->st_nlink);
}
于 2014-05-30T14:51:59.860 に答える