我试图找到的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