我想用C语言编写unix套接字编程,但是在阅读时出现Err No 4.我无法找到这个错误代码的描述。有人有任何想法吗?读取系统调用
Q
读取系统调用
0
A
回答
2
如果将开始寻找Unix错误代码名称的最终来源(/usr/include/errno.h
),你会在其中包含您的错误代码
#define EINTR 4 /* Interrupted system call */
(这是该文件是留给你的文件到达作为练习;))
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
0
如果您收到EINTR
,这可能意味着你已经正确安装的信号处理程序。良好的Unix系统将默认为重新启动系统调用时,你只需拨打signal
,但为了安全,您应该使用bsd_signal
功能(如果可用),或致电sigaction
与重新启动的标志,以避免EINTR
头痛。
相关问题
- 1. 关于读取系统调用c
- 2. 系统调用读取和写入C
- 3. `在C中读取()`系统调用不会读取字节
- 4. 系统调用:解读的ktrace输出
- 5. 系统调用(读/写与ioctl)
- 6. 写作Haskell的FFI读系统调用
- 7. mmap系统调用使用Golang的读取
- 8. C如何使用read系统调用读取字节?
- 9. 使用PHP读取系统日志
- 10. 系统(“”)调用
- 11. 在文本文件上读取系统调用
- 12. int filedes?系统调用读取和写入
- 13. strace如何读取系统调用sys_open的文件名?
- 14. 看不惯读取系统调用的行为
- 15. 缓存读取系统存储器VS CPU读取系统存储器
- 16. 从/ proc/kcore获取系统调用表中的系统调用地址
- 17. Vfork系统调用
- 18. sigaction系统调用
- 19. Pipe()系统调用
- 20. python系统调用
- 21. fork系统调用
- 22. sys_execve系统调用
- 23. MIPS:系统调用
- 24. Ptracing系统调用
- 25. 调用C“系统” ++
- 26. 系统调用write
- 27. indir系统调用
- 28. 管系统调用
- 29. UNIX系统和Windows系统中读取.CSV文件的差异
- 30. FreeBSD从另一个系统调用发出系统调用