2016-11-25 133 views
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命令相比,一切似乎都是正確的。

回答

2

您正在使用st_dev,它是文件所在的設備。你想st_rdev,這是設備的特殊文件「是」/代表。 (但你應該首先檢查文件是否是設備節點)

+0

我做了st_rdev而不是st_dev,它的工作原理非常好,謝謝你,你介意給我講解有什麼區別嗎? – James

+0

哦,沒關係,這一切都在男人2統計,我跳過了st_rdev部分,對不起,再次感謝:) – James

+0

@James如果你看'man 2 stat',你可以看到'st_dev'被描述爲設備該文件存儲在哪個文件中,而'st_rdev'是該文件的「代表設備」......我不知道如何更好地解釋它。 (編輯:好的,你自己找到了。=) – Arkku