【问题标题】:About the relation between linux shell's functions and C's functions()关于linux shell的函数和C的functions()的关系
【发布时间】:2021-06-26 02:37:31
【问题描述】:

例如,我认为shell中的ln命令是由C提供的link()和symlink()实现的,所以我检查了ln的src,但似乎没有使用它们。

【问题讨论】:

    标签: c++ c linux shell


    【解决方案1】:

    是的,很多 Linux 命令都是用 C 编写的;其中许多 C 程序可能使用 C 库函数,例如 link()symlink()。各种 Linux shell(例如 sh、csh 和 bash)本身都是用 C 编写的,也使用 C 库调用。

    但是...

    link() 和 symlink() 都是 POSIX 兼容的包装函数,它们不是“标准 C 库”的一部分。因此,“ln”命令不使用它们。详情请见unistd.h

    另见What is included in the C standard library

    【讨论】:

    • 我发现“ln”使用 symlinkat() 和 linkat()
    • @handeng,您应该将其添加到您的问题中。事实上,一个更好的问题可能是“为什么 GNU 命令行实用程序使用 symlinkatlinkat 而不是 symlinklink?”
    • 如果 Linux/Glibc 系统上使用 link() 等的任何 C 程序最终实际调用 XXXat 系统调用版本(如果存在),我不会感到惊讶。
    猜你喜欢
    • 1970-01-01
    • 2012-01-18
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    相关资源
    最近更新 更多