2015-03-25 44 views
2

我在哪裏可以找到STAT系列調用系列期望的結構的精確定義傳遞給STAT系統調用的結構的精確定義是什麼?

請注意,我指的是原系統調用一個會在組裝調用(系統調用號456在x86_64),而不是那些通常由libc中提供的包裝。

手冊頁,stat(2),以及我能夠從linux和glibc源代碼中挖掘出的內容給出了令人困惑和矛盾的結果(不同的結構字段排序,Extra字段,填充)。

我敢肯定,我沒有找到我應該在哪裏,但我似乎無法找到我所追求的信息。這導致我發佈這個問題。


澄清:我追求的是stat結構的確切定義通過在任何給定的架構系統調用返回。我知道我可以通過實驗確定這些信息。實驗僅限於我的特定體系結構。此外,我期待着某些與Linux ABI中使用的數據結構一樣重要的東西被記錄在某處。我想知道在哪裏。

問題here沒有此信息中所要求的信息。請取消將此帖標記爲重複。

+0

爲什麼你認爲系統調用4,5,6代表'的stat()系統調用'?正如我從[這裏](http://lxr.free-electrons.com/source/include/uapi/asm-generic/unistd.h)可以看到的,它們是'__NR_io_getevents','__NR_setxattr','__NR_lsetxattr'。我錯過了什麼嗎?另外,你指的是哪個特定的內核版本? – 2015-03-26 12:25:35

+0

@SamProtsenko這是我傳遞給系統調用指令的數字。在我的系統'x86_64/3.13.0'中,'SYS_STAT'被定義爲'__NR_stat',在文件'/ usr/include/x86_64-linux-gnu/asm/unistd_64.h'中定義爲' – urubi 2015-03-27 03:41:38

回答

2

struct stat定義嚴格取決於您的架構。例如。對於x86_64,您可以在arch/x86/include/uapi/asm/stat.h中找到它。

在用戶空間中,您可以在/usr/include/asm/stat.h文件中找到相同的結構。

這裏是x86_64的定義:

struct stat { 
    __kernel_ulong_t st_dev; 
    __kernel_ulong_t st_ino; 
    __kernel_ulong_t st_nlink; 

    unsigned int  st_mode; 
    unsigned int  st_uid; 
    unsigned int  st_gid; 
    unsigned int  __pad0; 
    __kernel_ulong_t st_rdev; 
    __kernel_long_t  st_size; 
    __kernel_long_t  st_blksize; 
    __kernel_long_t  st_blocks; /* Number 512-byte blocks allocated. */ 

    __kernel_ulong_t st_atime; 
    __kernel_ulong_t st_atime_nsec; 
    __kernel_ulong_t st_mtime; 
    __kernel_ulong_t st_mtime_nsec; 
    __kernel_ulong_t st_ctime; 
    __kernel_ulong_t st_ctime_nsec; 
    __kernel_long_t  __unused[3]; 
}; 
+1

因此,對於任何架構,查找任何'{ARCH}'的正確位置是'/ arch/{ARCH}/include/uapi/asm/stat.h'。謝謝。 – urubi 2015-03-27 03:36:07

相關問題