跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Linux C 语言的 unistd.h 中的 sync()和 Linux 命令行中 sync 功效一样吗?
未分類
10 11 月 2020

Linux C 语言的 unistd.h 中的 sync()和 Linux 命令行中 sync 功效一样吗?

Linux C 语言的 unistd.h 中的 sync()和 Linux 命令行中 sync 功效一样吗?

資深大佬 : ReputationZh 3

应该是差不多的,我才 sync 命令执行时就是调 sync()系统调用。你可以执行以下 strace sync 跟踪一下系统调用,就知道 sync 命令到底干了什么了:

[email protected]:~$ strace sync
execve(“/usr/bin/sync”, [“sync”], 0x7ffe44037610 /* 30 vars */) = 0
brk(NULL) = 0x55d3c942f000
arch_prctl(0x3001 /* ARCH_??? */, 0x7fff9667d0b0) = -1 EINVAL (Invalid argument)
access(“/etc/ld.so.preload”, R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, “/etc/ld.so.cache”, O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=26487, …}) = 0
mmap(NULL, 26487, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7ff948082000
close(3) = 0
openat(AT_FDCWD, “/lib/x86_64-linux-gnu/libc.so.6”, O_RDONLY|O_CLOEXEC) = 3
read(3, “177ELF21133>1360q2”…, 832) = 832
pread64(3, “64[email protected][email protected][email protected]”…, 784, 64) = 784
pread64(3, “4205GNU230043”, 32, 848) = 32
pread64(3, “4243GNUcBR3403053702609W242345)q235A1″…, 68, 880) = 68
fstat(3, {st_mode=S_IFREG|0755, st_size=2029224, …}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff948080000
pread64(3, “64[email protected][email protected][email protected]”…, 784, 64) = 784
pread64(3, “4205GNU230043”, 32, 848) = 32
pread64(3, “4243GNUcBR3403053702609W242345)q235A1″…, 68, 880) = 68
mmap(NULL, 2036952, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7ff947e8e000
mprotect(0x7ff947eb3000, 1847296, PROT_NONE) = 0
mmap(0x7ff947eb3000, 1540096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x25000) = 0x7ff947eb3000
mmap(0x7ff94802b000, 303104, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19d000) = 0x7ff94802b000
mmap(0x7ff948076000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7ff948076000
mmap(0x7ff94807c000, 13528, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ff94807c000
close(3) = 0
arch_prctl(ARCH_SET_FS, 0x7ff948081580) = 0
mprotect(0x7ff948076000, 12288, PROT_READ) = 0
mprotect(0x55d3c7e1e000, 4096, PROT_READ) = 0
mprotect(0x7ff9480b6000, 4096, PROT_READ) = 0
munmap(0x7ff948082000, 26487) = 0
brk(NULL) = 0x55d3c942f000
brk(0x55d3c9450000) = 0x55d3c9450000
openat(AT_FDCWD, “/usr/lib/locale/locale-archive”, O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=3035952, …}) = 0
mmap(NULL, 3035952, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7ff947ba8000
close(3) = 0
sync() = 0
close(1) = 0
close(2) = 0
exit_group(0) = ?

我在我的虚拟机上跑了一下,发现 sync 命令确实是调用 sync()系统调用来实现的,见倒数第四行。

大佬有話說 (2)

  • 資深大佬 : fasionchan

    Read The F**king Source Code :)!

    https://github.com/coreutils/coreutils/blob/master/src/sync.c#L231
    https://github.com/coreutils/coreutils/blob/master/src/sync.c#L25
    https://github.com/coreutils/coreutils/blob/master/src/system.h#L34

  • 資深大佬 : barathrum

    你拿 strace 看到的是 syscall
    unistd.h 只是 libc 而已

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具