- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在将软件项目的一些操作系统相关功能从 Linux 移植到 FreeBSD。因此,如果在 FreeBSD 10.1 上定义了 _POSIX_C_SOURCE=200809L
,我使用 getpagesize
发现了以下问题。
我创建了一个小测试程序
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int i = getpagesize();
return 0;
}
如果我编译使用的是
cc test.c -o test
它编译时没有任何警告。但是如果我定义 _POSIX_C_SOURCE=200809L
(我在代码的其他部分需要的 getline
函数的正确 POSIX 定义的结果)我得到:
cc test.c -D_POSIX_C_SOURCE=200809L
test.c:5:10: warning: implicit declaration of function 'getpagesize' is invalid in C99 [-Wimplicit-function-declaration]
int i = getpagesize();
^
尽管我按照 getpagesize
的联机帮助页中的说明包含了 unistd.h
。如何在仍定义的 _POSIX_C_SOURCE
的情况下编译代码而不发出警告?
最佳答案
(1) _POSIX_C_SOURCE
是一个错误的定义。您需要_XOPEN_SOURCE
。例如:
cc -D_XOPEN_SOURCE=700 test.c
或
cc -D_XOPEN_SOURCE=600 test.c
600
和 700
表示您的应用程序期望从系统库获得的单一 Unix 规范(简称 SUS,又名开放组规范,又名 POSIX)的版本。 See here for the SUSv7.
(2)但是。这可能仍然不起作用,因为 getpagesize()
是 BSD 特定的函数,如果您尝试在 POSIX 兼容模式下编译该文件,它实际上可能会被隐藏。
通常您不需要任何特殊的东西来访问 BSD 系统上的 BSD 函数,但可移植的方法是提供 _BSD_SOURCE
定义。
获取页面大小的更便携、符合 POSIX 标准的方法是 sysconf(_SC_PAGE_SIZE)
功能。 FreeBSD man page .
附注手头没有 BSD 来测试它。
关于c - FreeBSD:隐式声明 getpagesize 并定义 _POSIX_C_SOURCE=200809L。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29797547/
如果我在 FreeBSD 上,我想编译一些 C 代码。我为此使用了什么#ifdef? 我意识到这是正确的网络搜索应该回答的基本问题,但我找不到正确的搜索词。我看过代码检查 FREEBSD 和/或 __
好的,所以我刚刚读完 FreeBSD 的 kill(2) 的实现,并且正在尝试编写我自己的“kill”。这个系统调用需要 uid和 signum并将信号发送到 uid 拥有的进程,不包括调用进程。 我
如何获取系统中文件描述符的当前计数? 我知道如何获得最大值。 % sysctl kern.maxfiles kern.maxfiles: 8232 引用: http://www.freebsd.org
我继承了一个多台运行 jails 的 FreeBSD6.1 机器的环境。 由于本地网络上的 IP 耗尽,我想更改 jails,以便在物理网络上有 1 个可路由的 IP,而在 jails 之间有另一个不
如何从源代码在 FreeBSD 10.1 x86_64 上记录系统调用(int 0x80 和 sysenter/syscall 的系统调用编号和返回值)? 我知道 truss 可以完成这项工作,但我需
我的电脑上有 Windows、Linux 和 FreeBSD。但不小心我“忘记”在磁盘末尾分配 17 GB 的可用磁盘空间(“坏”Windows 使用了一个小的主恢复分区。因此我现在有 4 个主分区)
我有一个库,我想在 FreeBSD 上测试它。我的 CI 设置没有任何 FreeBSD 系统,添加它们会很困难,但是我可以在我的 CI 脚本中启动一个 VM。 (事实上 ,我已经这样做是为了在更奇
我负责管理一堆服务器,我想在每个服务器上设置我的提示,这样我就不会对我登录的位置感到困惑。 我已经编辑了我的 .cshrc文件并将其放入其中: set prompt=`whoami`@`hostnam
我正在为 FreeBSD 上的服务器编写错误处理代码。对于极其严重的错误,我想通过立即终止来避免数据损坏。很简单,exit(3) .在我退出之前,我输出引导我到达那里的相关变量。但是,理想情况下,此终
在 FreeBSD 系统上,在下面的顶部输出中,mysql 守护进程处于“sbwait”状态。这意味着什么? last pid: 12833; load averages: 0.18, 0.26
我有一个包含/boot/loader* 和/boot/kernel 等的 FreeBSD 镜像。它在 EC2 实例下启动良好,但我想用 Qemu 启动它。我尝试了各种方法,但都没有奏效。见下文。 qe
我倾向于在 Linux 上使用 cscope 和 ctags。我只是在我的源目录中运行 ctags -R 和 cscope -R 开始浏览源代码。 看起来它在 FreeBSD 中有所不同。 任何人请发
我安装了 FreeBSD 虚拟机,然后运行 sudo pkg install clang-devel。然而 clang-format似乎丢失了: -sh: clang-format: not fo
我正在为不使用 Make 的应用程序 ( Cypress ) 创建一个 FreeBSD 端口;相反,它使用 NPM: npm run binary-build-linux cd cli npm run
我在运行 Java 子进程时遇到性能问题Java下,运行在FreeBSD 9.0-RELEASE i386上。 对于该程序,System.exit() 的运行时间约为 2.6 秒。和我不明白为什么。在
我正在阅读 FreeBSD 的源代码,发现它们有 2 个文件可用于创建 MBR - sys/boot/i386/boot0/boot0.S 和 sys/boot/i386/mbr/mbr.S。 从目前
我正在尝试编写一个可移植的安装脚本来为我的编程语言构建编译器。可以看到脚本here : mkdir ArithmeticExpressionCompiler cd ArithmeticExpressi
我目前正在尝试找到一种在 FreeBSD 9.2 上安装包 openjdk8 的方法。为此,我使用了: sudo pkg install openjdk8 它没有任何问题。但是,这也将 perl 包更
在 FreeBSD 8.4 中,pkg 安装无法运行并出现错误。 $ pkg install git pkg:No active remote repositories configured. pkg
我正在考虑为 FreeBSD 编写一个守护程序,但是,我从来没有做过,而且看起来很棘手。 有没有我可以包含的库,然后只为我的守护进程编写特定的东西? 最佳答案 很抱歉发布这个答案而不是评论 - 我没有
我是一名优秀的程序员,十分优秀!