Страницы

Поиск по вопросам

вторник, 11 июня 2019 г.

C++ open разных файлов, возвращает одинаковый дескриптор

Здравствуйте, пытаюсь в линуксе перечислить доступные порты. Находит два, но при этом почему то возвращает одинаковые дескрипторы, хотя программа не закрывает файлы.
printf("Ports enumeration:
");
int portDesc; std::string pathBasis = "/dev/ttyS"; for (uint counter = 0; counter <= 64; counter++) { std::string searchString = pathBasis; searchString += std::to_string(counter); portDesc = open(searchString.c_str(), O_RDWR | O_NOCTTY | O_NDELAY); if (portDesc != -1) { printf("%s%s%s%x%s","Found serial port: ", searchString.c_str(), "
Port descriptor: ", std::to_string(portDesc), "
"); } }


Ответ

Вам надо заменить строчку
printf("%s%s%s%x%s","Found serial port: ", searchString.c_str(), "
Port descriptor: ", std::to_string(portDesc), "
");
на
printf("%s%s%s%x%s","Found serial port: ", searchString.c_str(), "
Port descriptor: ", portDesc, "
");
Потому как вы преобразовываете дескриптор в строку, а потом зачем-то выводите ее как целое шестнадцатеричное число (формат %x) - вот в этом косяк. У вас выводится не дескриптор - а не понятно что.
А еще лучше - на
printf("Found serial port: %s
Port descriptor: %x
", searchString.c_str(), portDesc);
А еще лучше - юзать потоки ввода-вывода стандартной библиотеки, чтобы так не попадать.

Комментариев нет:

Отправить комментарий