次のコード行を実行すると、よくわからない問題が発生します。主なアイデアは、ユーザーが検索対象の i ノードに入力することです。見つかったら、その inode に関連付けられたファイル名が出力され、そのファイル名に対してコマンド「stat」が実行され、そのファイルに関する情報が生成されます。
#define COMMAND_LEN 1024
#define DATA_SIZE 1024
int main(int argc, char **argv) {
FILE *pf;
char command[COMMAND_LEN];
char data[DATA_SIZE];
char inode_data[DATA_SIZE];
int iNode;
printf("Enter inode: ");
scanf(argv[0], iNode);
sprintf(command, "find -inum %i -type f", iNode);
pf = popen(command, "r");
if(!pf){
fprintf(stderr, "Could not open pipe for outlet.\n");
return;
}
fgets(data, DATA_SIZE, pf);
fprintf(stdout, "%s\n", data);
sprintf(command, "stat %s", data);
pf = popen(command, "r");
fgets(inode_data, DATA_SIZE, pf);
fprintf(stdout, "%s\n", inode_data);
if (pclose(pf) != 0)
fprintf(stderr, "Error: Failed to close command stream!\n");
Return 0;
}
コンパイルして実行し、inode 番号を入力すると、次のようになります。
Enter inode: 148869
stat: missing operand
Try 'stat --help' for more information.
Error: Failed to close command stream!
よくある質問の投稿から役立つヘルプを受け取りました sprintf からの情報を変数に保存します