2013-05-28 2 views
0

Я пишу код C для доступа к файловому паролю и распечатываю его содержимое за строкой (на самом деле это std-поток процесса, который был popen() - ред). Я придумал SSS (просто еще глупый) способ доступа к файлу:Как сделать управляемый событиями диск IO в C

static int this_event_handler(struct msg) { 

... 


    pFile = popen ("some command"); 
    while (fgets (mystring , 100 , pFile) != NULL) { 
     puts (mystring); 
    } 

... 

} 

Я знаю, что этот код блокирует цикл событий и последующие сообщения на сервер не будут полезными. Итак, есть ли хороший способ справиться с этим, не блокируя цикл событий?

Например, я ищу метод, который прослушивает поток, как событие, и генерирует событие всякий раз, когда новая строка записывается/читается (без создания нового потока).

ответ

0

Вы можете создать новый поток для чтения содержимого файла, который не будет блокировать цикл событий. Вот функция резьб:

void* put_msg(void* arg) { 
    File *pFile = (File*)arg; 
    mystring[100]; 
    while (fgets (mystring , 100 , pFile) != NULL) { 
     puts (mystring); 
    } 
    return NULL; 
} 

вызова его в обработчик события, только после открытия Pfile:

pthread_t pid; 
pthread_create(&pid, NULL, &put_msg, (void*)pFile); 
+0

Я думаю, что я должен был сказать, что без создания нового потока. Эта программа основана на событиях, и запуск нового потока не является благоприятным. – orezvani

+0

Вы можете попробовать [Linux aio] (http://man7.org/linux/man-pages/man7/aio.7.html). Это немедленно вернется. – Roger

+0

Не существует конфликта между управляемой событиями логикой и новым потоком. Новый поток или получение потока из пула потоков позволит вашему коду работать без блокировки. Ты это пробовал? Или просто ваша мысль? – Roger

Смежные вопросы