Questions tagged «posix»

POSIX是可移植操作系统接口(Portable Operating System Interface)的缩写,可移植操作系统接口是IEEE为维护操作系统之间的兼容性而指定的一系列标准。

5
如果不是用编程语言实现的话,“系统调用”是什么意思?
我想了解“系统调用”一词。我很熟悉,系统调用用于从用户空间应用程序获取内核服务。 我需要澄清的部分是“系统调用”和“系统调用的C实现”之间的区别。 这句话使我感到困惑: 在类似Unix的系统上,该API通常是C库(libc)的实现的一部分,例如glibc,该库为系统调用提供包装函数,通常将其命名为与调用的系统调用相同的名称。 什么是“他们调用的系统调用”?他们的来源在哪里?我可以直接将它们包含在我的代码中吗? 从一般意义上讲,“系统调用”只是一个POSIX定义的接口,但实际上要查看实现,可以检查C源代码,并在其中查看内核通信的实际用户空间实际上如何运行? 背景说明:最后,我试图了解每个c函数是否最终与中的设备进行交互/dev。
14 kernel  c  posix  system-calls 

2
符合POSIX的方式使用可能包含空格的文件名列表
我看过Bash脚本指南,建议使用数组处理包含空格的文件名。但是DashAsBinSh建议数组不能移植,因此我正在寻找一种POSIX兼容方式来处理可能包含空格的文件名列表。 我正在尝试修改以下示例脚本,以便 echo foo/target/a.jar foo/target/b.jar bar/target/lol whitespace.jar 这是脚本 #!/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`; …

4
在bash脚本中使用可变扩展查找-exec
我正在尝试在bash脚本中运行类似于以下命令的命令。它应搜索的所有子文件夹,$sourcedir并将特定类型的所有文件复制到的根级别$targetdir。 #!/bin/bash # These are set as arguments to the script, not hard-coded sourcedir="/path/to/sourcedir" targetdir="/path/to/targetdir" find "$sourcedir" -type f -name "*.type" -exec sh -c 'cp "$1" "$2/`basename "$1"`"' "{}" "$targetdir" \; 这似乎很接近,除了{}没有传递$2给-exec sh -c ... 我希望这样做尽可能接近“正确的方式”,并允许对文件名中的特殊字符(特别是单引号字符)进行容忍。 编辑:我看到有人建议使用xargs或参数链。我的印象是,这仅适用于有限数量的参数。例如,如果我有成千上万个.jpg文件,我正试图将它们从许多画廊目录中复制到一个巨大的幻灯片目录中,则解决方案链接参数仍然有效吗? 编辑2:我的问题是我_在-exec命令中的第一个选项sh之前缺少。对于任何对如何使find命令起作用感到好奇的人,添加_,一切都会好起来的: find "$sourcedir" -type f -name "*.type" -exec sh -c 'cp "$1" "$2"' …

2
在哪里可以找到官方的POSIX和UNIX文档?
我正在寻找有关所有POSIX标准和规范的正式文档。我希望无法阅读这些文档,以更好地理解UNIX系统以及它们在较低级别如何工作。我在这里和那里都看到了指向opengroup.org的链接,我认为它是标准背后的实体(但是,我也听说过IEEE也提到过很多)。 有关POSIX的简要介绍,请参阅以下问题:POSIX到底是什么?它为我回答了很多问题。

3
关于yash shell中的printf是否是内置命令有些困惑
根据其手册,该yash外壳具有printf内置功能。 但是,这是我在yash具有默认配置的shell中看到的内容: kk@eeyore ~ $ command -v printf /usr/bin/printf kk@eeyore ~ $ type printf printf: a regular built-in at /usr/bin/printf 是否printf在此外壳中内置?对于许多其他假定的内置实用程序(也可以作为外部命令使用),结果是相似的。 作为对比,在pdksh(ksh在OpenBSD,这里printf是不是内置的): $ command -v printf /usr/bin/printf $ type printf printf is /usr/bin/printf 而在bash(这里printf 是一个内置的): $ command -v printf printf $ type printf printf is a shell builtin

1
Solaris 11上的POSIX Awk?
这或多或少是以下两个问题的跟进问题: 通过awk'!x [$ 0] ++'文件删除重复行的语法错误 SunOs和Linux上的awk / nawk替代 我看到在Solaris 10(SunOS 5.10)上,我得到以下结果: $ type -a awk awk is /usr/bin/awk $ PATH="$(getconf PATH)" type -a awk awk is /usr/xpg4/bin/awk awk is /usr/bin/awk $ 在Solaris 10上,/usr/bin/awk不接受POSIX标准awk中语法如'!x[$0]++',但/usr/xpg4/bin/awk确实。到目前为止足够好了。 但是,在Solaris 11上,/usr/bin/awk甚至只有getconf PATH。虽然也有nawk和oawk是/usr/bin,这些显然都没有指出,一些从任何地方符号链接。 知道Solaris已获得POSIX认证,这使我感到惊讶。 如何使用可移植代码在Solaris 11上标准地获得与POSIX兼容的Awk,这些代码也可以在其他与POSIX兼容的系统上工作?(或者是检查nawkor 是否存在oawk并使用其中一个(如果存在)的唯一选择?) 因此,什么是 nawk和oawk?
13 awk  solaris  posix 

2
POSIX Shell中函数和变量的独立命名空间
在破折号中,函数和变量似乎位于单独的命名空间中: fn(){ fn="hello world" } fn; echo "The value is $fn!" #prints: The value is hello world! fn; echo "The value is $fn!" #prints: The value is hello world! #the fn variable doesn't conflict with the fn function 这是破折号专用功能还是POSIX保证?
13 shell  posix  dash 

3
我的FS上的MV是原子的吗?
如何检查mv我的fs(ext4)上是否为原子原子? 操作系统是Red Hat Enterprise Linux Server 6.8版。 一般来说,我该如何检查?我环顾四周,没有找到我的操作系统是否是标准POSIX。
13 posix  mv  move 



1
在sed中使用多个感叹号有什么意义?
POSIX sed文档说: 一个功能可以前面有一个或多个'!' 字符,在这种情况下,如果地址未选择模式空间,则应应用该功能。零个或多个<空白>字符应在第一个'!'之前接受 字符。尚不确定<blank>字符是否可以跟在'!'之后 字符,符合标准的应用程序不得使用“!” 带有<blank>字符的字符。 因此,使用任何POSIX sed,我们都可以: sed -e '/pattern/!d' file 与写作相同: sed -e '/pattern/!!d' file 而!!!d和n感叹号的标志仍然是罚款(含三级测试sed的版本传家宝工具箱中)。我看不到多个感叹号之间有什么好处。 为什么规范中允许使用该语法?在实际应用中它如何有用? 在这种情况下,GNU sed似乎不兼容,如果我们使用多个感叹号,它将抱怨: $ sed -e '/pattern/!!d' file sed: -e expression #1, char 11: multiple `!'s
12 sed  posix 

1
关于便携式sed -e ... db或!??
在此编辑中, StéphaneChazelas通过 再次插入xpression break和另一个xpression语句来对我的格式进行POSIX 化 。现在,我想问问他为什么在评论中,但是答案已经是修订版18,并且几乎所有以前的版本都已经得到了类似免费赠品的感谢(如果您可以看到已删除的评论,您将会知道我的意思是)。另外,我认为我已经足够了解为什么用一种可能更有用的方式来表达这一点。所以在这里...sed-e-e 我通常会尽量将总sed -e表情数保持在一个,但我也更倾向于尽可能符合规范,尤其是当差异不超过a <space>和an时-e。但是,如果我不明白为什么应该这样做,我将无法做到这一点。以下是我所了解的当前状态的简要摘要: 在' -e '休息能够方便地站在了一个sed脚本\n在ewline突破sed命令行语句...... 我承认模糊为什么 sed {函数中}的\n右括号必须在前面加一条斜线,如下所示: 的<right-brace>前面应带有a,<newline>并且可以在<blank>字符之前或之后。 一个\newline休息也同样需要进行以下任何使用...... a,b,c,i,r,t,w,或:。 但是我不清楚{函数}定义与!not运算符之间的关系。我在规范中唯一提到否定运算符的地方是: 一个功能之前可以有一个或多个!字符,在这种情况下,如果地址未选择模式空间,则应应用该功能。 这是否意味着使用a !表示{括号}?$!命令是什么-它们是否也应被' -e '中断分隔?当Stéphane最近POSIX确定我的答案时,这是解决了什么问题? 我认为它要么是!否定运算符,要么是b他在编辑中处理的牧场语句(或者可能是同时出现),但我不知道,也不想。如果它是唯一的b牧场语句,那么我相信一个d会在它的地方做,消除了需要' -e '休息,但我宁愿是一个hazarding前三次一定POSIXified答案。你能帮我吗? 毕竟我确实冒险了,但是没有很大的把握...
12 shell  sed  posix 



2
umask如何影响ACL?
有人可以向我解释umask如果激活了ACL,会如何影响新创建文件的默认掩码?是否有关于此的一些文档? 例: $ mkdir test_dir && cd test_dir $ setfacl -m d:someuser:rwx -m u:someuser:rwx . # give access to some user $ getfacl . # file: . # owner: myUsername # group: myGroup user::rwx user:someuser:rwx group::--- mask::rwx other::--- default:user::rwx default:user:someuser:rwx default:group::--- default:mask::rwx default:other::--- $ umask # show my umask 077 …
12 linux  permissions  posix  acl 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.