在 C 中实现 ls 命令
Implementing the ls command in C
我正在尝试使用尽可能多的标志在 c 中实现 ls 命令,但我在获取文件的正确 Minor 和 Major 时遇到问题,这是我所做的示例。
> ls -l ~/../../dev/tty
crw-rw-rw- 1 root tty 5, 0 Nov 25 13:30
这是正常的 ls 命令,你可以看到 Major 是 5,Minor 是 0。
我的程序显示如下:
Minor: 6
Major: 0
我还是个初学者,所以我并没有真正理解这里的问题,这是我到目前为止所做的(该程序与 ls 命令尚不相同,但仅显示有关文件的信息)。
int disp_file_info(char **argv)
{
struct stat sb;
stat(argv[1], &sb);
printf("Inode: %d\n", sb.st_ino);
printf("Hard Links: %d\n", sb.st_nlink);
printf("Size: %d\n", sb.st_size);
printf("Allocated space: %d\n", sb.st_blocks);
printf("Minor: %d\n", minor(sb.st_dev));
printf("Major: %d\n", major(sb.st_dev));
printf("UID: %d\n", sb.st_uid);
printf("GID: %d\n", sb.st_gid);
}
目前这只是为了获取文件的某些信息,与 ls 命令相比,除了 Minor 和 Major 之外,一切似乎都是正确的。
您正在使用st_dev
,这是文件所在的设备。你想要 st_rdev
,这是特殊文件 "is"/ 代表的设备。 (不过,您应该首先检查该文件是否是设备节点。)
我正在尝试使用尽可能多的标志在 c 中实现 ls 命令,但我在获取文件的正确 Minor 和 Major 时遇到问题,这是我所做的示例。
> ls -l ~/../../dev/tty
crw-rw-rw- 1 root tty 5, 0 Nov 25 13:30
这是正常的 ls 命令,你可以看到 Major 是 5,Minor 是 0。 我的程序显示如下:
Minor: 6
Major: 0
我还是个初学者,所以我并没有真正理解这里的问题,这是我到目前为止所做的(该程序与 ls 命令尚不相同,但仅显示有关文件的信息)。
int disp_file_info(char **argv)
{
struct stat sb;
stat(argv[1], &sb);
printf("Inode: %d\n", sb.st_ino);
printf("Hard Links: %d\n", sb.st_nlink);
printf("Size: %d\n", sb.st_size);
printf("Allocated space: %d\n", sb.st_blocks);
printf("Minor: %d\n", minor(sb.st_dev));
printf("Major: %d\n", major(sb.st_dev));
printf("UID: %d\n", sb.st_uid);
printf("GID: %d\n", sb.st_gid);
}
目前这只是为了获取文件的某些信息,与 ls 命令相比,除了 Minor 和 Major 之外,一切似乎都是正确的。
您正在使用st_dev
,这是文件所在的设备。你想要 st_rdev
,这是特殊文件 "is"/ 代表的设备。 (不过,您应该首先检查该文件是否是设备节点。)