strncpy到一个线程局部变量

时间:2012-03-07 18:36:17

标签: c strncpy thread-local-storage

我有一个有趣的问题。 我正在从Linux内核向用户空间传递错误字符串。我在用户空间中有一个带有api的库。应用程序链接到此库。当应用程序调用api时,会调用ioctl并将堆栈变量传递给内核。在内核中如果有任何错误,我会对该堆栈变量执行copy_to_user。一旦ioctl返回,我检查字符串。如果它不为空,我将字符串的strncpy作为线程局部变量。因此应用程序可以打印错误。

请不要质疑设计,但是当我运行代码时,看到我的盒子一直挂着。如果我评论strncpy,那么它似乎加载正常。我做了一个测试,注意到如果我删除了strncpy并只是在控制台上打印日志,我确实看到了很多消息。

有人可以让我知道为什么控制台一直挂着。

EDIT1:

示例代码:

\#define: Length 160

    typedef struct va_define{
    char str[LENGTH];
    }var_define;

    File: lib.c
    __thread var_define var;

    API1(struct pass){
    var_define tt;

    tt.str[0]=0;
    pass.str = str;

    ret=ioctl(ioctl_params, pass);

    if(ret<0){
      if(pass.str[0] ! = 0){
       strncpy(var.str,tt.str,LENGTH);
    }}
    }

正如我所提到的,我在控制台上打印日志而不是使用strncpy。打印很好。字符串从内核到用户空间的意义转移没有问题。

API1是库中的一个功能。功能很多。这些由链接到库的应用程序调用。

0 个答案:

没有答案