首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux上的‘`unshare`’定义在哪里?

Linux上的‘`unshare`’定义在哪里?
EN

Stack Overflow用户
提问于 2022-09-10 14:01:58
回答 2查看 73关注 0票数 0

我正在尝试使用unshare系统调用,但是我无法找到定义它的标题。我试过:

代码语言:javascript
复制
#define _GNU_SOURCE
#include <sched.h>

但是没有结果(函数不在那里,我自己看了标题)。我应该包括哪个标题?

EN

回答 2

Stack Overflow用户

发布于 2022-09-10 14:13:30

我试图复制问题中的声明,但失败了:我的测试程序构建时没有问题。

我查阅了unshare(2)手册页,发现

代码语言:javascript
复制
SYNOPSIS
       #define _GNU_SOURCE
       #include <sched.h>

       int unshare(int flags);

所以我写了一个小测试程序

代码语言:javascript
复制
#define _GNU_SOURCE
#include <sched.h>

int main(void)
{
  unshare(123);
  return 0;
}

然后,我在启用所有警告并将其视为错误的情况下构建了这些警告:

代码语言:javascript
复制
$ gcc -std=c11 -pedantic -Wall -Wextra -Werror -o unshare-ex unshare-ex.c
$ _

没有任何问题。

所以我用

代码语言:javascript
复制
$ 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()函数的定义,它扩展为

代码语言:javascript
复制
extern int unshare (int __flags) __attribute__ ((__nothrow__ , __leaf__));

但是用/usr/include/bits/sched.h写成

代码语言:javascript
复制
extern int unshare (int __flags) __THROW;

我不知道这里有什么问题。

FWIW,/usr/include/sched.h/usr/include/bits/sched.h都是作为glibc-headers-x86-2.35-15.fc36.noarch包的一部分提供的。

票数 2
EN

Stack Overflow用户

发布于 2022-09-10 14:07:10

显然不是

代码语言:javascript
复制
#define _GNU_SOURCE

它应该是

代码语言:javascript
复制
#define __USE_GNU
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73672405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档