我正在尝试使用C中的unix套接字编程。但是在阅读时我得到Err No为4.我无法找到此错误代码的描述。有人有任何想法吗?
答案 0 :(得分:2)
如果您首先查看Unix错误代码名称的最终来源(/usr/include/errno.h
),您将到达包含错误代码的文件
#define EINTR 4 /* Interrupted system call */
(这个文件留待您查找,作为练习;))
答案 1 :(得分:2)
对于不同的系统(甚至不同的类Unix系统),errno
值可能不同,因此符号常量应该用在代码中。
perror
函数将打印出(到 stderr )最后errno
值的描述性字符串以及您提供的字符串。
man 3 perror
strerror
函数只会将const char *
返回到perror
打印的字符串。
如果您的系统上有4 EINTR
,那么您在通话期间就会收到一个信号。有一些方法可以防止中断您的系统调用,但通常只需要:
while (1) {
ssize_t x = read(file, buf, len);
if (x < 0) {
if (errno == EINTR) {
errno = 0;
continue;
} else {
// it's a real error
答案 2 :(得分:0)
如果您获得EINTR
,则可能意味着您已正确安装了信号处理程序。只需调用signal
,好的unices将默认为可重新启动的系统调用,但为了安全起见,您应该使用bsd_signal
函数(如果可用),或者使用可重启标志调用sigaction
以避免令人头疼的是EINTR
。