我正在尝试使用unshare系统调用,但是我无法找到定义它的标题。我试过:
#define _GNU_SOURCE
#include <sched.h>但是没有结果(函数不在那里,我自己看了标题)。我应该包括哪个标题?
发布于 2022-09-10 14:13:30
我试图复制问题中的声明,但失败了:我的测试程序构建时没有问题。
我查阅了unshare(2)手册页,发现
SYNOPSIS
#define _GNU_SOURCE
#include <sched.h>
int unshare(int flags);所以我写了一个小测试程序
#define _GNU_SOURCE
#include <sched.h>
int main(void)
{
unshare(123);
return 0;
}然后,我在启用所有警告并将其视为错误的情况下构建了这些警告:
$ gcc -std=c11 -pedantic -Wall -Wextra -Werror -o unshare-ex unshare-ex.c
$ _没有任何问题。
所以我用
$ gcc -g -O2 -save-temps=obj -std=c11 -pedantic -Wall -Wextra -Werror -o unshare-ex unshare-ex.c
$ _然后查看unshare-ex.i来跟踪包含的文件。事实证明,/usr/include/sched.h最终包括了/usr/include/bits/sched.h,它包含unshare()函数的定义,它扩展为
extern int unshare (int __flags) __attribute__ ((__nothrow__ , __leaf__));但是用/usr/include/bits/sched.h写成
extern int unshare (int __flags) __THROW;我不知道这里有什么问题。
FWIW,/usr/include/sched.h和/usr/include/bits/sched.h都是作为glibc-headers-x86-2.35-15.fc36.noarch包的一部分提供的。
发布于 2022-09-10 14:07:10
显然不是
#define _GNU_SOURCE它应该是
#define __USE_GNUhttps://stackoverflow.com/questions/73672405
复制相似问题