Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读取系统调用_C_Sockets_Unix - Fatal编程技术网

C 读取系统调用

C 读取系统调用,c,sockets,unix,C,Sockets,Unix,我正在尝试用C语言编写unix套接字程序。但在阅读时,我得到的错误号为4。我无法找到此错误代码的描述。有人知道吗?如果您从查看Unix错误代码名称的最终来源(/usr/include/errno.h)开始,您将得到包含错误代码的文件 #define EINTR 4 /* Interrupted system call */ (作为练习,此文件留给您查找;)如果您想从查看Unix错误代码名称的最终来源开始(/usr/include/errno.h),您将得到包含错

我正在尝试用C语言编写unix套接字程序。但在阅读时,我得到的错误号为4。我无法找到此错误代码的描述。有人知道吗?

如果您从查看Unix错误代码名称的最终来源(
/usr/include/errno.h
)开始,您将得到包含错误代码的文件

#define EINTR            4      /* Interrupted system call */

(作为练习,此文件留给您查找;)

如果您想从查看Unix错误代码名称的最终来源开始(
/usr/include/errno.h
),您将得到包含错误代码的文件,如下所示:

#define EINTR            4      /* Interrupted system call */

(作为练习,此文件留给您查找;)

对于不同的系统(甚至不同的类Unix系统),
errno
值可能不同,因此应在代码中使用符号常量

perror
函数将(向stderr)打印最后一个
errno
值的描述性字符串以及您提供的字符串

man 3 perror
strerror
函数只需将
const char*
返回到
peror
打印的字符串

如果4在您的系统上是
EINTR
,则您在呼叫read时收到一个信号。有一些方法可以防止此操作中断系统调用,但通常您只需要:

while (1) {
   ssize_t x = read(file, buf, len);
   if (x < 0) {
       if (errno == EINTR) {
           errno = 0;
           continue;
       } else {
          // it's a real error
while(1){
ssize_t x=读取(文件、buf、len);
if(x<0){
如果(errno==EINTR){
errno=0;
继续;
}否则{
//这是一个真正的错误

对于不同的系统(甚至不同的类Unix系统),
errno
值可能不同,因此应在代码中使用符号常量

perror
函数将(向stderr)打印最后一个
errno
值的描述性字符串以及您提供的字符串

man 3 perror
strerror
函数只需将
const char*
返回到
peror
打印的字符串

如果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
while(1){
ssize_t x=读取(文件、buf、len);
if(x<0){
如果(errno==EINTR){
errno=0;
继续;
}否则{
//这是一个真正的错误

如果您获得的是
EINTR
,这可能意味着您安装的信号处理程序不正确。当您只需调用
signal
时,好的unices将默认为可重新启动的系统调用,但为了安全起见,您应该使用
bsd_signal
功能(如果可用),或者在重新启动时调用
sigaction
ble标志为避免
EINTR

带来的麻烦,如果您获得
EINTR
,可能意味着您安装的信号处理程序不正确。当您只需调用
signal
时,好的Unice将默认重新启动系统调用,但为了安全起见,您应该使用
bsd\U signal
功能(如果可用)e、 或者使用可重启标志调用
sigaction
,以避免
EINTR
带来的麻烦