在调用listen(fd,backlog)后,是否可以在套接字上取消删除?
编辑:我没有弄清楚自己的错误.我希望能够暂时解除套接字的问题.调用close()将使套接字处于M2LS状态并阻止我重新打开它(或者更糟糕的是,某些恶意程序可能绑定到该套接字)
暂时不显示将是向上游负载均衡器发出信号的一种方式(可能不是最佳方式)此应用无法接受此刻的任何更多请求
如果调用fclose(0),这会关闭stdin吗?
我问这个的原因是由于某种原因,stdin在我的应用程序中被关闭,我无法弄清楚为什么.我检查了fclose(stdin),这不在应用程序中,所以我想知道fclose(0)是否会导致未定义的行为,例如关闭stdin?
如果没有,stdin可能被错误关闭的其他方式是什么?
SA_RESTART根据man 信号(7),如果在安装信号处理程序时使用了标志,则内核可以透明地重启某些系统调用:
如果对信号处理程序中断了对以下某个接口的阻塞调用,则在使用SA_RESTART标志后,如果信号处理程序返回,则调用将自动重新启动 ; 否则呼叫将失败并显示错误EINTR:
然后它提到了一些可以(并且不能)重新启动的系统调用,但是close()在任何一个地方都没有提到,我怎么知道是否close()可以重启或其他任何功能?是POSIX指定它还是特定于Linux的行为?我在哪里可以找到更多信息?
我在网上看到了两个POSIX文档.
摘要: 2004年版纳入了技术勘误1和技术勘误2,解决了自2001年版批准以来发现的问题.这主要是由于解决了基础文件合并引起的整合问题.
摘要: POSIX.1-2008同时是IEEE Std 1003.1™-2008和开放组技术标准基础规范,第7版.2013年版包括IEEE Std 1003.1-2008/Cor 1-2013,并入IEEE Std 1003.1-2008(基础文件).2013年版本纳入了技术勘误1,解决了自2008年版本批准以来发现的问题.
我想知道第一个文件是否称为POSIX.1-2001或POSIX.1-2004.
关于POSIX的维基百科文章提到了第一个作为POSIX.1-2004的文章.但为什么?第一个基础文件是2001年版.所以它不应该被称为POSIX.1-2001吗?2004版仅将TC1和TC2添加到基础文档中.
例如,请参阅第二个.尽管是2013版,但由于基础文档是2008版,因此称为POSIX.1-2008.那为什么第一个不叫POSIX.1-2001?
是否有任何可移植的方式(在POSIX系统上)来确定文件描述符是否可搜索?我的想法是使用lseek(fd, 0, SEEK_CUR);并检查返回值是否为-1,但我不确定这是否会给出假阴性或误报.使用fstat和假设哪些类型的文件是可搜索/不可搜索的并不是一个好主意.还有其他想法吗?
我即将把一个大型的C++项目(某种类型的Library Project,它完全没有GUI)移植到Android上.它实际上是一个Visual C++项目,但它将作为中间步骤移植到Linux.我知道Android并不是一个"完整"的Linux,也没有声称提供所有POSIX功能,但我也知道在Android上有很多使用NDK的"POSIXish功能".
现在我的实际问题是:
与完整的POSIX集相比,哪些是Android上最不重要/最重要的功能?因此,在从Visual C++移植到Linux GCC时,我可以牢记这一点.
我试图在谷歌上找到一些东西,但没有发现任何真正有用的东西,只是在这里和那里有一些东西提到Android上有一些POSIX功能......
我正在处理(希望)UTF-8文本的大文件.我可以使用Ubuntu 13.10(3.11.0-14-generic)和12.04重现它.
在调查一个bug我遇到了奇怪的行为
$ export LC_ALL=en_US.UTF-8
$ sort part-r-00000 | uniq -d
? ? ? ? 251
? ? ? ? ? 291
? ? ? ? 301
? ? 475
? ? 565
$ export LC_ALL=C
$ sort part-r-00000 | uniq -d
$ # no duplicates found
Run Code Online (Sandbox Code Playgroud)
运行使用读取文件的自定义C++程序时也会出现重复项
C++似乎至少对于std::stringstream- 由于使用en_US.UTF-8区域设置时出现重复,它会失败.std::string输入/输出没有影响.
为什么在使用UTF-8语言环境时找到重复项,并且在C语言环境中找不到重复项?
导致此行为的文本的区域设置有哪些转换?
编辑:这是一个小例子
$ uniq -D duplicates.small.nfc
? ? ? ? ? 224
? ? ? ? ? 224
? ? …Run Code Online (Sandbox Code Playgroud) 我经常看到代码通过测试小于零而不是显式定义来检查来自POSIX函数的错误,并且通常只使用错误代码-1.那是
ret = function();
if (ret < 0) {
...
}
Run Code Online (Sandbox Code Playgroud)
VS
ret = function();
if (ret == -1) {
...
}
Run Code Online (Sandbox Code Playgroud)
第一次练习有什么目的吗?在某些体系结构上比0与-1比较的速度要快吗?如果现在定义的唯一错误代码是-1,C或POSIX标准是否可以保证第一个替代方案将来不会中断?如果没有,是否应该被视为不良做法?(我想大多数函数不太可能以这种方式改变,导致很多已编写的代码破坏?).
编辑:使问题更清楚:我只谈论专门返回-1的函数作为标准定义的错误代码.我知道有一些没有.我在很多地方看到了<0检查这些函数而不是== -1.因此问题.
在REPL中,我们通常可以使用sigint(即ctrl+)中断无限循环c,并在解释器中重新获得控制权.
>>> while True: pass
...
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyboardInterrupt
>>>
Run Code Online (Sandbox Code Playgroud)
但是在这个循环中,中断似乎被阻止了,我必须杀死父进程才能逃脱.
>>> *x, = itertools.repeat('x')
^C^C^C^C^C^C^C^C^\^\^\^\^\^Z^Z^Z^Z
Run Code Online (Sandbox Code Playgroud)
这是为什么?