相关疑难解决方法(0)

errno线程安全吗?

errno.h,这个变量被声明为extern int errno;我的问题是,errno在一些调用之后检查值是否安全或在多线程代码中使用perror()是否安全.这是一个线程安全变量吗?如果没有,那么替代方案是什么?

我在x86架构上使用linux和gcc.

c linux multithreading gcc

163
推荐指数
8
解决办法
4万
查看次数

如何确保strtol()已成功返回?

according documentation:

成功时,该函数将转换后的整数作为long int值返回.如果无法执行有效转换,则返回零值.如果正确的值超出可表示值的范围,则返回LONG_MAX或LONG_MIN,并将全局变量errno设置为ERANGE.

想想strtol(str, (char**)NULL, 10);如果str"0\0"如何知道函数失败或仅已转换与串"0"号?

c type-conversion

10
推荐指数
3
解决办法
9725
查看次数

将 errno 与用户定义的错误代码一起使用?

鉴于,这是我的策略(类似于win32 api函数):

1)保留返回值,用于指示成功(非零值)、错误(0)。

2)使用 errno,perror 提供更多信息。关于错误的类型。

3)使用参数返回值。

如果可以,那么我可以定义自己的错误代码(不与现有代码冲突)并使用 errno 来设置/检索它们。我认为现在我无法将 perror 与这些代码一起使用(它总是会说:未知错误),但我可以定义自己的基于 switch case 的函数来返回错误代码的描述。我可以定义自己的变量,但是为了使 errno现代化且线程安全,我们已经做了很多工作。

例如:

int val;
if(MyPop(&val))
   pintf_s("\n %d popped from my stack. . .",val);
else
   printf_s(Myperror());
Run Code Online (Sandbox Code Playgroud)

谢谢。

c error-handling

1
推荐指数
1
解决办法
3674
查看次数

标签 统计

c ×3

error-handling ×1

gcc ×1

linux ×1

multithreading ×1

type-conversion ×1