Articles of freebsd

在传递NULL的情况下转储核心

strdup(null)转储核心。 尝试在Ubuntu和FreeBSD的两个。 为什么? 它不应该返回null吗? char *b = NULL; a = strdup(b); 这将会在strdup调用中转储核心。

POSIX:FreeBSD vs Linux中的pipe道系统调用

在Linux(2.6.35-22-generic)中, man pipe指出 pipe()创build一个pipe道,一个可用于进程间通信的单向数据通道。“ 在FreeBSD(6.3-RELEASE-p5)中, man pipe指出 pipe()系统调用创build一个pipe道,这是一个允许双向数据stream的对象,并分配一对文件描述符。 一个是单向的,另一个是双向的。 我希望这不是一个愚蠢的问题,但哪种方法是这样做的标准方式? 他们都符合POSIX? 为了使我的意图清楚,我相信pipe()是一种方法,并且正在寻找一些弹药以获得任何点数,因此在考试中丢失了一些分数; p

如何在不修改FreeBSD,OpenBSD和Linux的情况下使用bash脚本?

对不起,标题可能有点刺激,但我什么都不知道。 无论如何,我想要一个bash脚本在FreeBSD,OpenBSD和Linux上工作,而不用修改它,但是bash不在Linux和BSD中的相同位置。 所以,如果我写#!/bin/bash那么它将不能在BSD上工作,因为bash shell位于/usr/local/bin/bash中。 有什么解决scheme让这个脚本同时工作吗? 还是我真的需要运送两个不同path的脚本…?

make for linux / freebsd的替代方法?

linux / freebsd有什么替代方法?

如何创build一个仅在pthread链接时才使用互斥体的库?

我正在Linux上创build一个C库,它有几个function,它们共同操作一些全局数据。 为了使这些函数成为线程安全的,他们必须在代码中的适当位置使用互斥锁。 在Linux中,为了在应用程序中使用pthread,需要在适当的库中链接-lpthread 。 在编译我的库的情况下,如果它的用户决定在他们的应用程序中使用pthreads,并且他们不这样做,我想让它工作。 在开发人员在应用程序中不使用线程的情况下,它们不会与pthreads链接。 因此,我希望我编译的库不要求它,而且,在单线程应用程序中使用互斥体使用不必要的开销(更不用说是愚蠢的)。 是否有某种方式来编写代码(如果有必要,使用GCC扩展)只有某些符号被链接时,某个代码块才会运行? 我知道我可以使用dlopen()和朋友,但是这本身就需要一些我想要避免的东西。 我想我所要找的东西必须存在,因为几个标准函数在同一条船上,并且需要互斥体是线程安全的(而且是互斥的),但是即使不与pthread链接,也能工作。 在这一点上,我注意到66&67行上的FreeBSD的popen()函数使用了非可移植的检查 – isthreaded ,以确定是否使用线程,以及是否使用互斥锁。 我怀疑这样的东西是否以任何方式标准化。 但是更重要的是,如果符号不被识别,那么这样的代码就不能编译和链接,而在Linux中,如果pthread没有链接,互斥符号将不会存在。 总结一下:在Linux上,如何创build一个库,它知道什么时候使用线程,如果是,在适当的情况下使用互斥锁,并且不需要链接到pthread,除非应用程序开发人员特别想在某处使用线程。

如何在Linux上运行aout?

问题是如何在Linux系统上执行aout格式的二进制文件(我的意思是在FreeBSD迁移到ELF之前使用的旧格式)。 有没有可能这样做没有额外的编码(有一些现有的解决scheme)? 可能它应该是Linux内核的内核模块或补丁的forms。 另一个解决scheme可能是用户空间启动器(甚至可能是运行时链接器)。 我已经search了类似的东西,但无法find一些东西。 我还没有检查系统调用接口的差异,如果你有这方面的意见,欢迎提供他们。 PS我知道写静态二进制用户空间启动器是相当微不足道的,但问题是关于一些现有的解决scheme。

在Linux和FreeBSD之间使bash脚本可移植的正确方法是什么?

我正在编写一些我想在我的Linux和FreeBSD系统上工作的bash脚本。 由于我主要在Linux上工作,所以我习惯于用我的bash脚本启动 #!/bin/bash 但是由于bash位于/usr/local/bin/bash所以在FreeBSD上不起作用。 所以在FreeBSD上,我的脚本需要开始 #!/usr/local/bin/bash 那么还有什么我可以使用的,可以跨两个系统移植吗? 我宁愿不维护两个版本的脚本。

使用VisualVM通过防火墙连接到远程jstatd实例

可能重复: VisualVM over ssh 我正在写这个问题并回答这个问题,因为我花了几个小时才把这个工作交给我,而我在这里find的答案却没有为我工作。 希望这对其他人有帮助。 如果你有另一个解决scheme,而不是我最终使用的解决scheme,请随时回答这个问题。 如果你的更好,我会接受你的。 问题:我试图用VisualVM和jstatd监视FreeBSD服务器上的一些自制Java应用程序(这也适用于Linux服务器),但是我无法让VisualVM列出服务器上的进程,即使在我转发我的防火墙中分配的和随机的jstatd端口,并可以看到使用sockstat进行的连接。

为什么用grep -q退出代码141?

有人可以解释为什么我从下面得到退出代码141? #!/usr/bin/bash set -o pipefail zfs list | grep tank echo a ${PIPESTATUS[@]} zfs list | grep -q tank echo b ${PIPESTATUS[@]} cat /etc/passwd | grep -q root echo c ${PIPESTATUS[@]} 我明白了 … a 0 0 b 141 0 c 0 0 从我的理解退出代码141是失败,但上面的行给零,所以它应该是成功,我会说。

在Linux和BSD中使用和不使用shebang的Bash脚本执行

如何和谁决定什么时候执行一个Bash类的脚本作为一个二进制文件执行没有shebang? 我想用 shebang运行一个正常的脚本是用binfmt_script Linux模块来处理的,它会检查一个shebang,parsing命令行并运行指定的脚本解释器。 但是如果有人在不使用shebang的情况下运行脚本,会发生什么? 我已经testing了直接执行execv方法,发现那里没有内核魔法 – 即像这样的文件: $ cat target-script echo Hello echo "bash: $BASH_VERSION" echo "zsh: $ZSH_VERSION" 运行只执行execv调用的编译的C程序会产生: $ cat test-runner.c void main(){ if(execv(“./ target-script”,0)== -1) PERROR(); } $ ./test-runner ./target-script:执行格式错误 但是,如果我从另一个shell脚本执行相同的操作,它将使用与原始shell解释器相同的shell解释器运行目标脚本: $ cat test-runner.bash #!/斌/庆典 ./target-script $ ./test-runner.bash 你好 bash:4.1.0(1) – 释放 zsh的: 如果我对其他shell执行相同的技巧(例如,Debian的默认sh – /bin/dash ),它也可以工作: $ cat test-runner.dash #!/斌/破折号 ./target-script […]