标签: posix

如果不是编程语言中的实现,“系统调用”是什么意思?

我想了解术语“系统调用”。我熟悉系统调用用于从用户空间应用程序获取内核服务。

我需要澄清的部分是“系统调用”和“系统调用的 C 实现”之间的区别。

这是一个让我困惑的引用:

在类 Unix 系统上,该 API 通常是 C 库 (libc) 实现的一部分,例如 glibc,它为系统调用提供包装函数,通常与它们调用的系统调用命名相同

什么是“他们调用的系统调用”?他们的来源在哪里?我可以将它们直接包含在我的代码中吗?

一般意义上的“系统调用”是否只是 POSIX 定义的接口,但要实际查看实现,可以检查 C 源代码并在其中查看实际用户空间与内核通信的实际情况?

背景说明:我试图了解是否每个 c 函数最终都与来自/dev.

c kernel system-calls posix

17
推荐指数
3
解决办法
6061
查看次数

“sh”是否必须在“/bin”目录中?

我已经读到符合 POSIX 的操作系统(例如:Linux)必须有shshell。

但是它必须sh/bin目录中,还是可以在任何目录中?

linux shell posix

17
推荐指数
2
解决办法
7404
查看次数

POSIX shell:如果`$` 是单词中的最后一个字符,它会失去它的特殊含义吗?

在 ash、dash 和 bash 上,当我跑步时

$ echo ab$
Run Code Online (Sandbox Code Playgroud)

它返回

ab$
Run Code Online (Sandbox Code Playgroud)

这种行为是由 POSIX 指定的还是只是符合 POSIX 的 shell 中的常见约定?我在 POSIX Shell 命令语言页面上找不到任何提到此行为的内容。

shell posix

17
推荐指数
2
解决办法
1509
查看次数

linux命令检查POSIX消息队列

我们可以在ipcs命令的帮助下查看system V消息队列的详细信息。是否有任何命令可以在 Linux 中检查 POSIX 消息队列?

linux ipc posix

16
推荐指数
3
解决办法
5万
查看次数

处理可能带有空格的文件名列表的 POSIX 兼容方式

我已经看到 Bash 脚本指南建议使用数组来处理包含空格的文件名。然而,DashAsBinSh表明数组不可移植,所以我正在寻找一种符合 POSIX 的方式来处理可能包含空格的文件名列表。

我正在寻找修改下面的示例脚本,以便它 echo

foo/target/a.jar
foo/target/b.jar
bar/target/lol whitespace.jar
Run Code Online (Sandbox Code Playgroud)

这是脚本

#!/usr/bin/env sh

INPUT="foo/target/a.jar
foo/target/b.jar
bar/target/b.jar
bar/target/lol whitespace.jar"
# this would be produced by a 'ls' command
# We can execute the ls within the script, if it helps

dostuffwith() { echo $1; };

F_LOCATIONS=$INPUT
ALL_FILES=$(for f in $F_LOCATIONS; do echo `basename $f`; done)
ALL_FILES=$(echo "$ALL_FILES" | sort | uniq)

for f in $ALL_FILES
do
    fpath=$(echo "$F_LOCATIONS" | grep -m1 $f)
    dostuffwith $fpath
done
Run Code Online (Sandbox Code Playgroud)

shell-script filenames posix quoting whitespace

16
推荐指数
2
解决办法
5483
查看次数

我的 fs 上的 mv 是原子的吗?

如何检查mv我的 fs (ext4)是否是原子的?

操作系统是 Red Hat Enterprise Linux Server 6.8 版。

一般来说,我该如何检查?我环顾四周,没有发现我的操作系统是否是标准的 POSIX。

posix move mv

16
推荐指数
1
解决办法
1万
查看次数

为什么允许“who mil”不产生任何输出?

在 IEEE Std 1003.1-2008(又名 The Open Group Base Specifications Issue 7,或仅 POSIX 标准)的 2016 版中,该who实用程序的基本原理部分提到了以下内容:

实现不为调用who mil产生任何输出是可以接受的。

谁或什么是“mil”?为什么允许实现不产生任何输出who mil

history posix who

16
推荐指数
1
解决办法
210
查看次数

sed、awk、perl 和 sh 哪个最便携?

有人可以按照可移植性的顺序排列这些工具吗?即使在最小的 *nix 系统上也肯定可以找到其中的哪些?他们中的任何一个100%肯定存在吗?我的猜测是顺序如下:

  1. awk
  2. sed
  3. perl

虽然我想象有些系统不默认为 bourne shell,但某些shell 将作为默认值存在,它总是在/bin/sh? 如果它不是伯恩型外壳,大概不会。双方awksed有解释他们对POSIX规范的页面所以想必他们将始终存在。是这样吗?我可以确定两者都将安装在任何 *nix 上吗?包括嵌入式系统?

posix portability

15
推荐指数
2
解决办法
3203
查看次数

Posix 是否需要任何设备?

Posix 是否需要任何设备?例如,/dev/urandom,/dev/zero/dev/null?

我怀疑不是因为非 *nix 操作系统,而是想要求完整性。

devices posix

15
推荐指数
1
解决办法
2230
查看次数

对yash shell中的printf是否是内置命令有点困惑

yash外壳有一个printf内置的,根据其说明书

但是,这是我在yash具有默认配置的shell 中看到的:

$ command -v printf
/usr/bin/printf
$ type printf
printf: a regular built-in at /usr/bin/printf
Run Code Online (Sandbox Code Playgroud)

printf这个shell中是否内置了?结果与许多其他假定的内置实用程序类似,这些实用程序也可用作外部命令。

作为对比,在pdkshksh在OpenBSD,这里printf不是内置的):

$ command -v printf
/usr/bin/printf
$ type printf
printf is /usr/bin/printf
Run Code Online (Sandbox Code Playgroud)

并在bash(其中printf 内置的):

$ command -v printf
printf
$ type printf
printf is a shell builtin
Run Code Online (Sandbox Code Playgroud)

posix shell-builtin printf yash

15
推荐指数
2
解决办法
1056
查看次数