2012-03-30 70 views
7

我在尋找struct fdtablestruct file會讓我確定打開的文件是套接字還是管道。如何確定打開的文件是套接字還是管道?

我似乎可以找到的唯一路徑是:

struct file f ....; 
f.path->mnt->mnt_devname 

這將返回設備名稱在掛載點,所有插座/管道顯然是分別屬於sockfs或pipefs。

是否有檢查,看看是否已打開文件是否使用結構文件的不同成員或fdtable插座或管更快的方法?

注:

回答

10

有在linux/stat.h,檢查特殊宏定義我使用從2.6.24內核定義inode->i_mode

#define S_ISLNK(m)  (((m) & S_IFMT) == S_IFLNK) 
    #define S_ISREG(m)  (((m) & S_IFMT) == S_IFREG) 
    #define S_ISDIR(m)  (((m) & S_IFMT) == S_IFDIR) 
    #define S_ISCHR(m)  (((m) & S_IFMT) == S_IFCHR) 
    #define S_ISBLK(m)  (((m) & S_IFMT) == S_IFBLK) 
    #define S_ISFIFO(m)  (((m) & S_IFMT) == S_IFIFO) 
    #define S_ISSOCK(m)  (((m) & S_IFMT) == S_IFSOCK) 

看來你需要使用它們的2 - S_ISFIFOS_ISSOCK以這種方式:

if (S_ISFIFO(file->f_path.dentry->d_inode->i_mode)) {...} 
if (S_ISSOCK(file->f_path.dentry->d_inode->i_mode)) {...} 
+0

謝謝,這是非常有幫助的。 – 2012-03-30 21:51:38

相關問題