草庐IT

strerror

全部标签

c++ - 在 Alpine Linux 上错误地声明了 strerror_r

我正在使用strerror_r在日志记录辅助函数中。如手册页所述,此函数有两个版本。POSIX版本返回一个int。GNU版本返回一个字符串(char*)。因此,为了让我的C++代码更具可移植性,我有一段与此类似的代码:charbuffer[1000];intsize=1000;intresult=0;char*msg=buffer;buffer[0]='\0';#ifdef_GNU_SOURCEmsg=strerror_r(err,buffer,size);#elseresult=strerror_r(err,buffer,size);if(result!=0){sprintf(buf

c - 如何在当前语言环境下使用 strerror_l?

我正在修复一些使用strerror(非线程安全)进行多线程处理的Linux代码。我发现strerror_r和strerror_l都是线程安全的。由于strerror_r的不同定义(取决于_GNU_SOURCE它有不同的定义)我想使用较新的strerror_l函数,但是如何我应该获取当前语言环境的locale_t对象吗?我没有使用iconv或其他任何东西,只是普通的libc,而且我不知道如何获得“默认语言环境”对象(我不关心用什么语言打印错误,我只想要一个人类可读的字符串。) 最佳答案 如果您将""传递给locale参数,newloc

c++ - 为什么我不能使用 strerror?

我正在将一些代码移植到Windows,Microsoft编译器(VisualC++8)告诉我strerror()不安全。撇开微软提供的所有安全字符串中的烦恼因素不谈,我实际上可以看到一些已弃用的函数是危险的。但我不明白strerror()有什么问题。它接受一个代码(int),并返回相应的字符串,如果该代码未知,则返回空字符串。危险在哪里?C中有没有好的替代方法?C++中有没有好的替代方案?[编辑]已经得到了一些好的答案,现在了解到某些实现可能已经疯狂到实际写入公共(public)共享缓冲区-在单线程中重入是不安全的,更不用说线程之间了!-我的问题不再是“为什么我不能使用它,还有什么替代

c - strerror_r 应该允许多大的尺寸?

OpenGroupPOSIX.1-2001定义strerror_r,TheLinuxStandardBaseCoreSpecification3.1也是如此.但是我找不到对错误消息可以合理预期的最大大小的引用。我希望有一些定义可以放在我的代码中,但我找不到。代码必须是线程安全的。这就是为什么使用strerror_r而不是strerror。有人知道我可以使用的符号吗?我应该创建自己的吗?示例intresult=gethostname(p_buffy,size_buffy);interrsv=errno;if(result来自文档:开放组基本规范第6期:ERRORSThestrerror_

c - 如何知道 'errno' 是什么意思?

当调用execl(...)时,我得到一个errno=2。这是什么意思?我怎么知道这个errno的意思? 最佳答案 您可以使用strerror()获取错误号的人类可读字符串。这与perror()打印的字符串相同但如果您将错误消息格式化为标准错误输出以外的其他内容,它会很有用。例如:#include#include/*...*/if(read(fd,buf,1)==-1){printf("Ohdear,somethingwentwrongwithread()!%s\n",strerror(errno));}Linux还支持显式线程安全变

c - 如何知道 'errno' 是什么意思?

当调用execl(...)时,我得到一个errno=2。这是什么意思?我怎么知道这个errno的意思? 最佳答案 您可以使用strerror()获取错误号的人类可读字符串。这与perror()打印的字符串相同但如果您将错误消息格式化为标准错误输出以外的其他内容,它会很有用。例如:#include#include/*...*/if(read(fd,buf,1)==-1){printf("Ohdear,somethingwentwrongwithread()!%s\n",strerror(errno));}Linux还支持显式线程安全变

【C标准库】详解strerror函数

创作不易,感谢支持strerror头文件:string.h描述:strerror()函数接受一个参数:errnum,它是一个表示错误代码的整数值。此函数将错误代码转换为说明错误的合适字符串指针并返回。注意:strerror生成的错误字符串取决于开发平台和编译器格式:char*strerror(interrnum);参数:errnum--错误号,通常是errno。在c语言中有一条全局的错误码errno,在程序运行过程中,只要库函数调用失败,我们就会把此处产生的错误码放入变量errno中errno是一个全局的错误码的变量,当c语言的库函数在执行过程中,发生了错误,就会把对应的错误码赋值到errno

【C标准库】详解strerror函数

创作不易,感谢支持strerror头文件:string.h描述:strerror()函数接受一个参数:errnum,它是一个表示错误代码的整数值。此函数将错误代码转换为说明错误的合适字符串指针并返回。注意:strerror生成的错误字符串取决于开发平台和编译器格式:char*strerror(interrnum);参数:errnum--错误号,通常是errno。在c语言中有一条全局的错误码errno,在程序运行过程中,只要库函数调用失败,我们就会把此处产生的错误码放入变量errno中errno是一个全局的错误码的变量,当c语言的库函数在执行过程中,发生了错误,就会把对应的错误码赋值到errno
12