TEMP_FAILURE_RETRY
时间: 2023-11-17 17:07:04 浏览: 131
TEMP_FAILURE_RETRY是一个宏定义,用于在系统调用被中断时自动重试。它的作用是在系统调用返回-1并且errno被设置为EINTR(表示系统调用被中断)时,自动重试该系统调用。以下是一个使用TEMP_FAILURE_RETRY的示例:
```c
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#define TEMP_FAILURE_RETRY(expression) \
(__extension__ ({ long int __result; \
do __result = (long int) (expression); \
while (__result == -1L && errno == EINTR); \
__result; }))
int main() {
char buf[1024];
ssize_t n;
do {
n = TEMP_FAILURE_RETRY(read(STDIN_FILENO, buf, sizeof(buf)));
if (n == -1) {
perror("read");
return 1;
}
printf("Read %ld bytes\n", n);
} while (n > 0);
return 0;
}
```
该程序从标准输入读取数据,并在读取到EOF时退出。由于read系统调用可能会被中断,因此使用TEMP_FAILURE_RETRY宏来自动重试read系统调用。
阅读全文