2015-03-25 2 views
2

Где я могу найти точное определение той конструкции, которую ожидает семейное системное соединение STAT?Каково точное определение структуры, переданной системному вызову STAT?

Обратите внимание, что я имею в виду необработанного системных вызовов можно было бы назвать в сборе (система вызывает номер 4, 5 и 6 на x86_64), а не фантики, которые, как правило, предоставляемые LIBC.

Страница руководства, stat(2), и то, что я мог бы вывести из исходного кода Linux и glibc, приводило к путанице и противоречивым результатам (упорядочивание полей другой структуры, дополнительные поля, заполнение).

Я уверен, что я виноват в том, что не смотрю, где я должен, но я не могу найти информацию, которую мне нужно. Который заставил меня опубликовать этот вопрос.


Пояснение: Что я ищу это точное определение структуры стат, возвращаемый системным вызовом на любой данной архитектуры. Я знаю, что могу экспериментально определить эту информацию. Эксперимент ограничивается моей конкретной архитектурой. Кроме того, я ожидаю, что что-то столь же важно, как и структура данных, используемая в ABI Linux, где-то документируется. Я хочу знать, где.

Вопрос here не содержит информации, требуемой в этом сообщении. Отмените это сообщение как дубликат.

+0

Почему вы думаете, что системные вызовы 4, 5, 6 стоять 'стат()' системные вызовы? Как я вижу из [здесь] (http://lxr.free-electrons.com/source/include/uapi/asm-generic/unistd.h), они являются '__NR_io_getevents',' __NR_setxattr', '__NR_lsetxattr'. Я что-то упускаю? Кроме того, какую конкретную версию ядра вы имеете в виду? –

+0

@SamProtsenko Это цифры, которые я передаю в инструкцию syscall. В моей системе 'x86_64/3.13.0',' SYS_STAT' определяется как '__NR_stat', который в свою очередь определяется как 4 в файле:'/usr/include/x86_64-linux-gnu/asm/unistd_64.h' – urubi

ответ

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