Здравствуйте, пытаюсь в линуксе перечислить доступные порты.
Находит два, но при этом почему то возвращает одинаковые дескрипторы, хотя программа не закрывает файлы.
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);
А еще лучше - юзать потоки ввода-вывода стандартной библиотеки, чтобы так не попадать.
Комментариев нет:
Отправить комментарий