2014-10-30 5 views
0

я заметил, что системный вызов «стат» ведет себя по-разному с вызовамиРазличные способы системного вызова вызывает

stat() 

syscall(__NR_stat) 

Я не понимаю, почему же системный вызов ведут себя по-другому просто , потому что способ назвать это меняется?

+0

Какие отличия конкретно? – tangrs

ответ

0

Если это код C, тогда вы должны понимать, что у вас есть синтаксические ошибки. Но так или иначе, на платформах могут быть разные значения __NR_stat marcro. Чтобы узнать это, вы должны увидеть файл /usr/include/unistd.h. И кто знает, каковы последовательности вызова этих функций? Пожалуйста, сообщите нам дополнительную информацию.

1

stat(), предоставленный библиотекой C в Linux сегодня, обычно реализуется поверх sys_stat64() ядра.

Это один из многих случаев, когда man page должен быть вашей первой ссылкой:

Underlying kernel interface 

    Over time, increases in the size of the stat structure have led to 
    three successive versions of stat(): sys_stat() (slot __NR_oldstat), 
    sys_newstat() (slot __NR_stat), and sys_stat64() (new in kernel 2.4; 
    slot __NR_stat64). The glibc stat() wrapper function hides these 
    details from applications, invoking the most recent version of the 
    system call provided by the kernel, and repacking the returned 
    information if required for old binaries. Similar remarks apply for 
    fstat() and lstat(). 

Вы также можете получить исходный пакет для установленной библиотеки C и смотреть через него для фактической реализации обертка.

Смежные вопросы