2
這是我在開發我的課程項目時發現的。下面是C代碼塊,用於打印出尚未連接到任何進程的空管的信息。硬鏈接到空管道的數量linux vs unix
{
int pfd[2], nread;
char s[100];
struct stat pipe_info;
if (pipe(pfd) == -1)
{
perror ("pipe");
return (-1);
}
if (fstat (pfd[0], &pipe_info) < 0)
perror ("fstat");
print_info (&pipe_info);
if (fstat (pfd[1], &pipe_info) < 0)
perror ("fstat");
print_info (&pipe_info);
return(0);
}
void print_info (struct stat *pipe_info)
{
printf ("mode %o\n", pipe_info->st_mode);
printf ("inode %d\n", pipe_info->st_ino);
printf ("device %d\n", pipe_info->st_dev);
printf ("minor device %d\n", pipe_info->st_rdev);
printf ("num links %d\n", pipe_info->st_nlink);
printf ("uid %d\n", pipe_info->st_uid);
printf ("gid %d\n", pipe_info->st_gid);
printf ("size %d\n", pipe_info->st_size);
printf ("atime %d\n", pipe_info->st_atime);
printf ("mtime %d\n", pipe_info->st_mtime);
printf ("ctime %d\n", pipe_info->st_ctime);
printf ("block size %d\n", pipe_info->st_blksize);
printf ("block %d\n", pipe_info->st_blocks);
}
我在Linux機器和Solaris OS機器上編譯了源代碼。我發現在Linux機器上,鏈接數爲1,而在Solaris OS機器上,管道的鏈接數爲0.我對兩個系統的內核都很陌生,想知道爲什麼兩個系統上的鏈接數量是不同的?
謝謝,你的文章很有幫助,但我不確定你的陳述的正確性 - 「這個領域有一個無意義的價值」。 –
好的,將我的解釋替換爲「除非您有權訪問源代碼,否則nlink的語義對您無意義。」我沒有資源,大概也不是你的,因爲Solaris是專有軟件。通過你自己的經驗測試,Solaris產生了一個不合格的結果,我們都不能猜測爲什麼。如果我有一臺Solaris機器可用,那麼有很多簡單的測試可以解釋Solaris下nlink的含義。這就是在過去的糟糕時代,有30種不同的核心,除了歷史之外,沒有任何理由,它們都略有不同。 – msw