是否有任何链接或材料可以让我了解更多有关Linux中不同错误号的信息?
目前在man errno中我为每个错误编号得到一行,但我想知道发生特定错误的条件或机会(用简短的单词更详细的描述)
例如
EADDRNOTAVAIL 99 /* Cannot assign requested address */
Run Code Online (Sandbox Code Playgroud)
当套接字试图绑定到机器本地不存在的ip-address时会出现上述错误.同样对于所有其他错误,是否有任何维基或材料的详细信息?
好吧,因为错误通常发生在做某事时,最好的办法就是在man页面上查找"某事".
例如,如果您errno从fscanf()通话中取回34 ,您首先应该:
grep 34 $(find /usr/include -name '*errno*h')
Run Code Online (Sandbox Code Playgroud)
弄清楚错误是什么:
/usr/include/bits/errno.h:#define ERANGE 34 /* Math result not representable. */
/usr/include/asm-generic/errno-base.h:#define ERANGE 34 /* Math result not ... */
Run Code Online (Sandbox Code Playgroud)
然后,查看man页面fscanf(),您会看到:
ERANGE - The result of an integer conversion would exceed the size
that can be stored in the corresponding integer type.
Run Code Online (Sandbox Code Playgroud)
而你(希望)能够从那里弄明白.
如果需要错误列表和(简要)描述,请grep按如下方式修改上述内容:
grep define $(find /usr/include -name '*errno*h') | less
Run Code Online (Sandbox Code Playgroud)
并浏览输出.
并且,如果您仍然不知道错误及其原因(描述有点简洁,我会同意),我会把它(例如EADDRNOTAVAIL)插入到右上角的那个小对话框中.您的浏览器1,你会回来像这样(或许多其他精彩页):
无法分配请求的地址
您正在尝试bind(2)访问非本地的本地地址.例如,如果一台机器的IP地址是127.0.0.1,1.2.3.4并且您正在尝试绑定1.2.3.5,那么您将收到此错误.检查以确保您尝试绑定的地址存在于您尝试绑定它的计算机上.
如果您正在进行"预绑定连接",您首先绑定到本地端口,然后使用套接字进行出站连接,也会出现此错误.如果本地端口已连接到给定的远程IP和端口(即,已经存在相同的套接字对),则会收到此错误(Linux上的值= 99).
4页链接到EADDRNOTAVAIL:
- setsockopt(2)
- 数据包(7)
继续,尝试使用其他错误值,这不是太糟糕.
1您正在使用Firefox,对吗?:-)
错误代码相当通用,并且仅在特定函数的上下文中才有意义。因此,学习所有错误代码并没有太大的优势,因为它们对于不同的功能可能意味着细微不同的事情,并且无论如何都必须以不同的方式处理。
函数手册页中的“错误”部分将告诉您其返回值可能出现哪些代码或errno它们发生的原因。