什么是POSIX取消点?我正在寻找POSIX取消点的确切列表.
我这么问是因为我有一本书,说accept()和select()是取消点,但我已经看到了在互联网上声称,他们没有网站.
此外,如果Linux取消点与POSIX取消点不同,我也想要它们的列表.
在具有有线和无线接口的Linux系统(例如192.168.1.x和192.168.2.x子网)上,我想发送通过所有可用接口发出的UDP广播(即通过有线和无线接口发送) ).
目前我发送到()到INADDR_BROADCAST,但似乎广播只通过其中一个接口发送(并不总是相同,后续广播可能使用其他接口).
有没有办法可以发送通过每个接口发出的UDP广播?
我正在运行CentOS 5.2并使用yum来管理包.我几乎没有运气安装php-posix,但几乎100%确信它是一个真实可用的包......在某个地方.有人有运气安装吗?
FWIW,我使用以下内容:
sudo yum install -y php-posix
更新:我意识到这可能是我的主机(Slicehost)的一个问题,因为我实际上已经为我的PHP版本启用了cli,posix和pcntl(5.2.9)
在POSIX文件系统中持久重命名文件的正确方法是什么?特别想知道目录上的fsyncs .(如果这取决于OS/FS,我问的是Linux和ext3/ext4).
注意:在StackOverflow上还有关于持久重命名的其他问题,但是AFAICT它们没有解决fsync-ing目录(这对我来说很重要 - 我甚至不修改文件数据).
我目前有(在Python中):
dstdirfd = open(dstdirpath, O_DIRECTORY|O_RDONLY)
rename(srcdirpath + '/' + filename, dstdirpath + '/' + filename)
fsync(dstdirfd)
Run Code Online (Sandbox Code Playgroud)
具体问题:
提前致谢.
关于Linux上相同进程的线程之间的上下文切换成本是否有任何好的经验数据(x86和x86_64,主要是感兴趣的)?我说的是一个线程在自动或非自愿地进入睡眠状态之前在用户空间中执行的最后一个指令之间的周期数或纳秒数,以及在同一个CPU /核心唤醒后执行相同进程的不同线程的第一条指令.
我编写了一个快速测试程序,它不断执行rdtsc分配给同一个cpu/core的2个线程,将结果存储在volatile变量中,并与其姐妹线程的相应volatile变量进行比较.第一次检测到姐妹线程值的变化时,它会打印差异,然后返回循环.我在Atom D510 cpu上以这种方式获得了大约8900/9600个周期的最小/中值计数.这个程序看起来是否合理,数字看起来是否可信?
我的目标是估计在现代系统上,每个连接线程的服务器模型是否可以与选择型多路复用竞争甚至优于选择类型的多路复用.这似乎在理论上可行,因为从FD执行IO的过渡X金融衍生工具Y涉及仅仅会在一个线程睡眠,而在另一个醒来,而不是多个系统调用,但它是依赖于上下文切换的开销.
受到最后一个闰秒的启发,我一直在探索使用POSIX调用的计时(特别是间隔计时器).
POSIX提供了几种设置计时器的方法,但它们都有问题:
sleep并且nanosleep这些在被信号中断后重新启动很烦人,并引入了时钟偏差.您可以通过一些额外的工作来避免一些但不是全部的这种偏差,但这些功能使用实时时钟,所以这并非没有陷阱.setitimer或者更现代的timer_settime这些被设计为间隔计时器,但它们是每个进程,如果您需要多个活动计时器,这是一个问题.它们也不能同步使用,但这不是什么大问题.clock_gettime并且clock_nanosleep在使用时看起来像是正确的答案CLOCK_MONOTONIC.clock_nanosleep支持绝对超时,因此您可以只是睡眠,增加超时,然后重复.在中断之后也很容易重启.不幸的是,这些功能可能也是特定于Linux的:在Mac OS X或FreeBSD上不支持它们.pthread_cond_timedwait可以在Mac上使用,可以gettimeofday作为一个kludgy解决方案,但在Mac上它只能与实时时钟一起使用,因此当系统时钟设置或闰秒发生时,它会受到不当行为的影响.我缺少一个API吗?是否有一种合理的可移植方式在类UNIX系统上创建性能良好的间隔定时器,或者这总结了今天的状态?
通过良好的行为和合理的便携性,我的意思是:
关于闰秒的注释(响应R ..的回答):
POSIX天的长度恰好是86,400秒,但现实世界的日子很少会更长或更短.系统如何解决这种差异是由实现定义的,但闰秒通常与前一秒共享相同的UNIX时间戳.另请参见:闰秒以及如何处理它们.
Linux内核闰第二个错误是在将时钟设置为秒后无法进行内务处理的结果:https://lkml.org/lkml/2012/7/1/203.即使没有那个错误,时钟也会向后跳一秒钟.
假设我有一个#!/bin/sh可以采用各种位置参数的脚本,其中一些可能包含空格,两种引号或两种引号等.我想迭代"$@"并为每个参数立即以某种方式处理它,或者保存以供以后使用.在脚本结束时,我想启动(可能exec)另一个进程,传递一些这些参数,所有特殊字符都保持不变.
如果我没有对参数进行处理,othercmd "$@"那么工作正常,但我需要提取一些参数并稍微处理它们.
如果我可以假设Bash,那么我可以printf %q用来计算我eval以后可以引用的args的引用版本,但这不适用于例如Ubuntu的Dash(/bin/sh).
是否printf %q可以使用内置函数和POSIX定义的实用程序在简单的Bourne shell脚本中编写任何等效文件,比如说我可以复制到脚本中的函数?
例如,脚本以ls相反的顺序尝试其参数:
#!/bin/sh
args=
for arg in "$@"
do
args="'$arg' $args"
done
eval "ls $args"
Run Code Online (Sandbox Code Playgroud)
适用于许多情况:
$ ./handle goodbye "cruel world"
ls: cannot access cruel world: No such file or directory
ls: cannot access goodbye: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但不是在'使用时:
$ ./handle goodbye "cruel'st world"
./handle: 1: eval: Syntax error: Unterminated quoted …Run Code Online (Sandbox Code Playgroud) 任何人都可以用一种非常简单的方式来解释sigemptyset()的作用吗?为什么有用?我读了一堆定义,但我只是不明白.从我收集的内容中,它跟踪用于阻止目的的信号?我不太清楚我明白为什么那会有用.是这样我们不能递归地得到那个特定的信号吗?
使用sigemptyset()的基本示例:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
int main(){
struct sigaction act;
sigemptyset(&act.sa_mask);
act.sa_handler=function_name;
act.sa_flags=0;
sigaction(SIGINT, &act, 0);
}
Run Code Online (Sandbox Code Playgroud) 为什么在调用之前需要锁定互斥锁pthread_cond_wait?
另外,在调用之前是否需要锁定(在同一个互斥锁上)pthread_cond_signal?
谢谢你的帮助.