2014-10-26 6 views
-1

Я использую Qt для проекта. Я буду постоянно читать из файла с чтения из unistd.h, но как я могу это сделать? Я попытался использовать бесконечный цикл while, но при сбое приложения, когда я это делаю.Как я могу читать из файла, используя чтение из unistd.h

PS Я новичок, когда дело доходит до Qt и fileoperation (unistd.h).

int fd; 
char c; 

fd = open("/home/stud/txtFile", O_RDWR);//open file 
if(fd == -1) 
    cout << "can't open file" << endl; 

read(fd, (void*)&c, 1); 

if(c == '1') 
    //do stuff 
else 
    //do stuff 
+1

Почему вы используете 'unistd.h' для чтения файлов, если используете Qt? Qt поставляется с набором независимых от платформы файловых операций. –

+0

Я использую Qt в linux на beagleboard с дисплеем lcd. Я хочу прочитать файл файла драйвера устройства - файл nod. –

+1

Вы уже забыли про [ваш другой вопрос] (http://stackoverflow.com/questions/26554879/qt-creator-read-from-a-file-and-print-it-out-on-beaggleboard)? В любом случае Qt предоставляет вам асинхронный API, тогда как вам нужно будет его самостоятельно изобретать, если вы не используете его. Занятые петли плохие. – lpapp

ответ

0

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

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

Изменить на:

fd = open("/home/stud/txtFile", O_RDWR);//open file 
if(fd < 0) { 
    cout << "can't open file" << endl; 
    // potentially you may want to exit() here 
} 
else { 
    read(fd, (void*)&c, 1); 
    // if done with file for this pass, close it. If you need to read again 
    // in same program keep it open 
    close(fd); 
} 

Ваш пример кода никогда не закрывает файл после прочтения. Поэтому я не знаю, что вы подразумеваете под «держать чтение»; если вы имеете в виду, что вы открываете и читаете этот код снова и снова, не закрывая(), то в конечном итоге у вас не будет дескрипторов.