0
我试图在c中使用尽可能多的标志来实现ls命令,但是我在获取正确的小调和大调文件方面存在问题,下面是我的一个示例没有。在C中实现ls命令
> ls -l ~/../../dev/tty
crw-rw-rw- 1 root tty 5, 0 Nov 25 13:30
这是正常的ls命令,你可以看到的主要是5,和次要为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);
}
现在这只是为了获得有关文件的某些信息,除了Minor和Major之外,与ls命令相比,一切似乎都是正确的。
我做了st_rdev而不是st_dev,它的工作原理非常好,谢谢你,你介意给我讲解有什么区别吗? – James
哦,没关系,这一切都在男人2统计,我跳过了st_rdev部分,对不起,再次感谢:) – James
@James如果你看'man 2 stat',你可以看到'st_dev'被描述为设备该文件存储在哪个文件中,而'st_rdev'是该文件的“代表设备”......我不知道如何更好地解释它。 (编辑:好的,你自己找到了。=) – Arkku