Strncpy для локальной переменной потока - PullRequest
0 голосов
/ 07 марта 2012

У меня был интересный вопрос.Я передаю строку ошибки из ядра 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 - это одна функция в библиотеке.Есть много функций.Они вызываются приложениями, которые ссылаются на библиотеку.

...