我試圖找到的Linux 3.2.21 x86_64的實現在unistd.h中頭部聲明的sync(2)
的Unix功能的同步(2)Linux的函數調用的定義。縱觀Linux的unistd.h中得到這個原型:凡是x86_64的處理器
/* Make all changes done to all files actually appear on disk. */
extern void sync (void) __THROW;
所以我認爲這意味着該sync
是Linux內核的定義之外,尋找裏面的glibc 2.7,這給了我我在這個定義glibc-2.17/misc/sync.c:
/* Make all changes done to all files actually appear on disk. */
void
sync()
{
__set_errno (ENOSYS);
}
因此,這意味着sync
確實沒有什麼比設定的errno
值等。
然而,當我拆開的系統/usr/lib/x86_64-linux-gnu/libc.a,我發現同步部分進行系統調用,傳遞值162
(這樣做東西)。
在Linux的源代碼重新在arch/x86/include/asm/unistd_64.h看,我看到:
#define __NR_sync 162
__SYSCALL(__NR_sync, sys_sync)
現在我真的很困惑。
如果sync(2)
在Linux之外定義,爲什麼會有系統調用它? x86_64架構的sync
的定義在哪裏?
P.S.:我確實發現的預處理器定義爲arch/x86/kernel/syscall_64.c,但這似乎暗示sync
系統調用只是調用聲明爲void sys_sync(void)
的外部函數。這個功能的定義在哪裏?
我也建議看看http://musl-libc.org/這是一個替代的libc庫,其源代碼比Gnu Libc更容易理解 – 2013-03-19 18:24:16