Почему системный журнал имеет два разных объявления функций? - PullRequest
2 голосов
/ 07 января 2020

В соответствии с Linux справочными страницами 1 и 2 , функция syslog имеет два различных описания функций:

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

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

Однако, кроме C ++, в C.

нет перегрузки функций. Как объяснить этот факт?

Ответы [ 2 ]

5 голосов
/ 07 января 2020

Один определяется в разделе 2 (syslog(2)) страниц справочника (*), то есть системный вызов. Другой из раздела 3 (syslog(3)), таким образом, библиотечная функция C.

Таким образом, «технически», это разные функции, которые имеют одно и то же имя (хотя, конечно, они связаны между собой, так как (3) использует (2)).

(*) См. разделы справочной страницы .

3 голосов
/ 07 января 2020

Первый - системный вызов, а не функция c, он заключен в функцию klogctl, второй - c функция.

Вызов системного вызова гораздо более сложен, чем просто вызывая функцию , объявление в man-страницах - это просто краткий обзор, показывающий имя системного вызова и аргументы, которые он ожидает в синтаксисе, с которым знакомы программисты.

...