Tag: errno

绑定错误(99):无法分配请求的地址

我试图让以下代码工作,但收到上述错误。 我有理由相信我输入的地址是正确的,因为它在一个执行类似任务的单独程序中工作。 这让我相信我犯了一些愚蠢的错误,任何帮助都会受到赞赏! /*Create TCP socket*/ int tcp_socket(void) { int s; while((s = socket(PF_INET,SOCK_STREAM,0))==-1 && errno == EINTR){ continue; } return s; } /*Bind tcp*/ int tcp_bind(int s, char *server, uint16_t port) { int rv; struct sockaddr_in sin; struct hostent *host_addr; assert(s >= 0); host_addr = gethostbyname(server); if (!host_addr) { perror(“gethostbyname(server)”); return -1; } memset(&sin, […]

如何在C中打印errno的符号名称?

我可以使用perror()或strerror()来打印属于errno的“人类可读”错误消息,但是如果我还要打印errno的符号名称(例如“ EAGAIN ”)该怎么办? 任何方便的function或宏来做到这一点? 更新:附上我最终编写的代码,基于下面接受的答案及其评论的想法: #include #include #include int get_errno_name(char *buf, int buf_size) { // Using the linux-only gawk instead of awk, because of the convenient // match() functionality. For Posix portability, use a different recipe… char cmd[] = “e= && ” // errno to be inserted here (max digits = 6) “echo ‘#include ‘ […]

errno变量的默认值

我想使用errno库来定义项目(c语言)函数的返回。 我想知道什么…… 我会做这样的事情: #include int myfunction (void) { int res; /*Some actions….*/ if(success) res = 0; else if (fail) res = -EIO; return res; } 我喜欢总是初始化我的局部变量,我想知道使用errno值(可能是0)的变量的默认值是什么? 但我真的不想默认设置:“SUCCESS”我更喜欢“失败”值。 你对此有何看法(或规则)? 谢谢你提前。

unit testing错误条件 – EINTR

简而言之,如何在系统调用上对EINTR等错误条件进行unit testing。 我正在研究的一个特殊例子,它本身就是一个案例,就是当它返回带有(errno == EINTR)的EOF时是否有必要再次调用fclose。 行为取决于fclose的实现: // Given an open FILE *fp while (fclose(fp)==EOF && errno==EINTR) { errno = 0; } 如果在发生EINTR时释放fp,则此调用可能不安全。 如何测试何时(errno == EINTR)的error handling?

什么样的错误将“错误”设置为非零? 为什么fopen()设置“errno”而fputc()没有?

什么样的库函数影响errno并将其设置为非零值会遇到什么样的错误? 在我的下面的程序中,我打算使用if(errno!=0)作为检查我使用的库函数是否正常运行的条件,这就是我找到的(参见下面的代码): 首先,我使用if(errno!=0)来测试文件是否已使用fopen()成功fopen() 。 如果我尝试打开一个不存在的文件,则将errno设置为非零(在我的情况下为2),并通过在每个阶段打印出errno的值来validation它。 但是如果我打开一个现有文件,那么errno的值保持为零,因为fopen()正确地打开了文件。 在这个问题上, if(errno!=0)充当我已经注释掉的if(pFile==NULL)的完美替代品。 如果文件成功打开,并且errno仍为0 ,则控件将移至第一个else块。 这是我发现关于errno行为的混淆。 这里,由于我已经在r(读)模式下打开文件并尝试使用fputc()写入它,我期望得到的写错误将errno为非零,就像它由fopen()设置时一样无法成功打开文件。 但是即使在使用fputc()写入失败之后, errno的值仍然为零。 (这可以通过在错误写入后打印errno值来validation)。 为什么会这样? 为什么一个函数fopen()设置errno时遇到I / O错误,而其他函数fputc()面对的写错误不影响errno ? 如果是这样,我们怎样才能可靠地使用errno作为错误指标? 我是否使用errno来测试fopen()是否成功运行,而不是“if(pFile == NULL)”不明智? 我将非常感谢您对此的分析答案。 #include #include int main () { FILE * pFile; printf(“%d\n”,errno); pFile = fopen(“D:\\decrypt.txt”,”r”); printf(“%d\n”,errno); // Prints 0 if fopen() successful,else 2 //if(pFile==NULL) perror(“Error opening file”); if (errno!=0) perror (“Error opening […]

Windows 7 x64上的tmpfile()

在Windows 7 x64上运行以下代码 #include #include int main() { int i; FILE *tmp; for (i = 0; i < 10000; i++) { errno = 0; if(!(tmp = tmpfile())) printf("Fail %d, err %d\n", i, errno); fclose(tmp); } return 0; } 在第637和第1004次通话中给出了错误13(权限被拒绝),它在XP上运行良好(没试过7 x86)。 我错过了什么或这是一个错误吗?

为什么要回到负面的错误? (例如,返回-EIO)

另一个简单例子: if (wpa_s->mlme.ssid_len == 0) return -EINVAL; 为什么一元减? 对于在成功时返回> 0且在失败时返回<(=)0的函数(通常)是否这样做了,还是有其他原因?

我可以假设C stdlib函数不使用errno吗?

我正在看一段C代码 void printerror(char *message) { printf (“There was an error: ‘%s’\n”, message); switch (errno) { … do stuff depending on errno } } 我认为这可能是一个问题,因为printf可能会在进入函数和到达switch之间改变错误。 但是,printf的联机帮助页没有说出设置errno的任何内容,所以我可以假设它不会设置它吗? 标准中是否有任何内容可以保证哪些function将使用和不使用errno?

将perror输出重定向到fprintf(stderr,“”)

如果系统调用函数失败,我们通常使用perror来输出错误消息。 我想使用fprintf输出perror字符串。 我该怎么做这样的事情: fprintf(stderr, perror output string here);

TCP连接错误115正在进行操作原因是什么?

我的应用程序创建了一个TCP连接,这是正常的工作。 但是在一个网络服务器上有很多IP说 174.XXX 54.xxx喜欢这个 当调用TCP连接(非阻塞,超时为60秒)到IP 174.XXX总是成功。 但TCP连接到同一服务器的ip 54.xxx正在失败(大多数时候)正在进行errno 115 measn操作。 你能否解释一下errno 115的可能原因是什么? 操作系统:Linux 我的TCP连接代码如下 tcp_connect(……) { int iValOpt = 0; int iLength= 0; fcnt((int)(long)SockID,F_SETFL_O_NONBLOCK); ret = connect (sockID,(struct sockaddr*)pstSockAdr,uiSockLen); if (ret < 0) { if (errno == EINPROGRESS) { stTv.tv_sec = 60; stTv.tv_usec = 0; FD_ZERO(&write_fd); FD_SET(sockID,&write_fd); iLength = sizeof(int); if (0 getsockopt(sockID,SOL_SOCKET,SO_ERROR,(void*)(&iValOpt),&iLength)) { return […]