1) Непонятная проблема происходит при закрытии дескриптора файла (открытого файла на чтение) в коде на C++ ниже (ОС Linux). Это метод класса, который
вызывается периодически по таймеру. Если я вставляю в конце этой функции close(barcode_fd), то программа падает в segmentation fault, а если оставляю без оператора close, то программа работает правильно, но в системе со временем исчерпываются все дескрипторы файлов, что очевидно, т. к. они не закрываются в программе.
Буду благодарен, если кто подскажет почему close() не хочет закрывать дескриптор и как это сделать правильно?
(Наличие или отсутствие флага O_NONBLOCK никак не влияет на решение проблемы, т. е. все точно также как я описал, то же самое с любым текстовым файлом, не обязательно /dev/ttyACM0.)
2) Я понимаю, что это скорее сишный код в методе, но я не знаю как с помощью файловых потоков С++ задать неблокируемый режим для файла на чтение (т. е. флаг O_NONBLOCK). Буду благодарен за подсказку как это сделать при помощи файловых потоков С++.
int FromFtpForm::getBarcode()
{
int barcode_fd;
char buf_barcode[150];
barcode_fd = open("/dev/ttyACM0", O_RDONLY| O_NONBLOCK);
if (barcode_fd < 0) return -1;
for (int i=0; i<150; i++) buf_barcode[i] = '\0';
read(barcode_fd, buf_barcode, sizeof(buf_barcode));
close(barcode_fd); // Если этот убрать, то программа работает, если оставить, то падает
return 0;
}