我想了解术语“系统调用”。我熟悉系统调用用于从用户空间应用程序获取内核服务。
我需要澄清的部分是“系统调用”和“系统调用的 C 实现”之间的区别。
这是一个让我困惑的引用:
在类 Unix 系统上,该 API 通常是 C 库 (libc) 实现的一部分,例如 glibc,它为系统调用提供包装函数,通常与它们调用的系统调用命名相同
什么是“他们调用的系统调用”?他们的来源在哪里?我可以将它们直接包含在我的代码中吗?
一般意义上的“系统调用”是否只是 POSIX 定义的接口,但要实际查看实现,可以检查 C 源代码并在其中查看实际用户空间与内核通信的实际情况?
背景说明:我试图了解是否每个 c 函数最终都与来自/dev.
我已经读到符合 POSIX 的操作系统(例如:Linux)必须有shshell。
但是它必须sh在/bin目录中,还是可以在任何目录中?
在 ash、dash 和 bash 上,当我跑步时
$ echo ab$
Run Code Online (Sandbox Code Playgroud)
它返回
ab$
Run Code Online (Sandbox Code Playgroud)
这种行为是由 POSIX 指定的还是只是符合 POSIX 的 shell 中的常见约定?我在 POSIX Shell 命令语言页面上找不到任何提到此行为的内容。
我们可以在ipcs命令的帮助下查看system V消息队列的详细信息。是否有任何命令可以在 Linux 中检查 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) 如何检查mv我的 fs (ext4)是否是原子的?
操作系统是 Red Hat Enterprise Linux Server 6.8 版。
一般来说,我该如何检查?我环顾四周,没有发现我的操作系统是否是标准的 POSIX。
在 IEEE Std 1003.1-2008(又名 The Open Group Base Specifications Issue 7,或仅 POSIX 标准)的 2016 版中,该who实用程序的基本原理部分提到了以下内容:
实现不为调用who mil产生任何输出是可以接受的。
谁或什么是“mil”?为什么允许实现不产生任何输出who mil?
Posix 是否需要任何设备?例如,/dev/urandom,/dev/zero或/dev/null?
我怀疑不是因为非 *nix 操作系统,而是想要求完整性。
该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中是否内置了?结果与许多其他假定的内置实用程序类似,这些实用程序也可用作外部命令。
作为对比,在pdksh(ksh在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 ×10
linux ×2
shell ×2
c ×1
devices ×1
filenames ×1
history ×1
ipc ×1
kernel ×1
move ×1
mv ×1
portability ×1
printf ×1
quoting ×1
shell-script ×1
system-calls ×1
whitespace ×1
who ×1
yash ×1