ファイル上のすべてのハード リンクを C で書き出す必要があります。その方法がわかりません。bash コマンドを呼び出すことも 1 つの可能性ですが、どのコマンドを呼び出すのでしょうか?
与えられた: ファイル名 'foo.txt'
検索: 「foo.txt」へのハードリンクであるすべてのファイル
他の答えは明らかにコマンドに依存してい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);
}