【问题标题】:Why does syslog have two different function declarations?为什么 syslog 有两个不同的函数声明?
【发布时间】:2020-01-07 07:14:35
【问题描述】:

根据Linux手册页12,函数syslog有两个不同的函数声明如下:

int syslog(int type, char *bufp, int len);

void syslog(int priority, const char *format, ...);

但是,除了 C++,C 中没有函数重载。

如何解释这个事实?

【问题讨论】:

    标签: c++ c linux overloading glibc


    【解决方案1】:

    一个在手册页 (*) 的第 2 节 (syslog(2)) 中定义,因此是系统调用。另一个来自第 3 节 (syslog(3)),因此是一个 C 库函数。

    所以“技术上”它们是碰巧具有相同名称的不同函数(尽管它们当然是相关的,因为 (3) 使用的是 (2))。

    (*) 见manual page sections

    【讨论】:

    • 如果我在一个源文件中包含两个头文件怎么办?
    • 我认为没有明智的方法可以做到这一点。因此syslog(2) 的手册页说,glibc 将此“功能”公开为klogctl。如果您查看实际的sys/klog.h source,您将看到没有定义名为syslog 的函数。要了解有关系统调用的更多信息,请参阅this
    【解决方案2】:

    第一个是系统调用不是c函数,它被包裹在函数klogctl中,第二个是c函数。

    调用系统调用比 simply invoking a function 复杂得多,手册页中的声明只是一个快捷方式,以程序员熟悉的语法向您显示系统调用名称和它期望的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-27
      • 2017-08-13
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多