Получайте уведомления монитора устройств в Linux, используя переполнение стека

Я написал C++ программа в Linux это уведомляет меня всякий раз, когда внешнее устройство подключено или отключено от моей системы. я использовал netlink для цели и poll Вызов функции используется для ожидания событий. Но сейчас я столкнулся с серьезной проблемой:

Когда я вставляю Pendrive в мою систему, poll() вызывается много раз (мне довелось увидеть его 4 раза). Я храню значения в std::map для последующего использования. Теперь, когда я подключаю другое устройство, я хочу, чтобы карта была очищена для хранения новой информации. Как понять, связан ли вывод со вторым устройством или нет?

if(*prev_tok == "ACTION")
{
cout << "Action = "<< *curr_tok << "\n";
DeviceDetails["Action"] = *curr_tok;
}
else if(*prev_tok == "ID_FS_LABEL")
{
cout << "LABEL = "<< *curr_tok << "\n";
DeviceDetails["LABEL"] = *curr_tok;
}
else if(*prev_tok == "ID_FS_VERSION")
{
cout << "FileSystem Version = "<< *curr_tok << "\n";
DeviceDetails["FileSystem Version"] = *curr_tok;
}
else if(*prev_tok == "ID_FS_UUID")
{
cout << "UUID = "<< *curr_tok << "\n";
DeviceDetails["UUID"] = *curr_tok;
}
else if(*prev_tok == "ID_MODEL_ID")
{
cout << "Model ID = "<< *curr_tok << "\n";
DeviceDetails["Model ID"] = *curr_tok;
}
else if(*prev_tok == "ID_MODEL")
{
cout << "Model Name = "<< *curr_tok << "\n";
DeviceDetails["Model Name"] = *curr_tok;
}
else if(*prev_tok == "ID_SERIAL_SHORT")
{
cout << "Serial Number = "<< *curr_tok << "\n";
DeviceDetails["Serial Number"] = *curr_tok;
}
else if(*prev_tok == "ID_REVISION")
{
cout << "Version = "<< *curr_tok << "\n";
DeviceDetails["Version"] = *curr_tok;
}
else if(*prev_tok == "ID_VENDOR")
{
cout << "Vendor Name = "<< *curr_tok << "\n";
DeviceDetails["Vendor Name"] = *curr_tok;
}
else if(*prev_tok == "ID_VENDOR_ID")
{
cout << "Vendor ID = "<< *curr_tok << "\n";
DeviceDetails["Vendor ID"] = *curr_tok;
}
else if(*prev_tok == "MODALIAS")
{
cout << "Description = "<< *curr_tok << "\n";
DeviceDetails["Description"] = *curr_tok;
}
else if(*prev_tok == "DEVPATH")
{
cout << "Device Path = "<< *curr_tok << "\n";
DeviceDetails["Device Path"] = *curr_tok;
}
else if(*prev_tok == "DEVLINKS")
{
cout << "Device Links = "<< *curr_tok << "\n";
DeviceDetails["Device LINk"] = *curr_tok;
}
else if(*prev_tok == "ID_CDROM_MEDIA")
{
cout << "CD INSERTED\n";
DeviceDetails["CDROM_MEDIA"] = *curr_tok;
}
else if(*prev_tok == "ID_CDROM_DVD")
{
cout << "DVD\n\n";
DeviceDetails["CDROM_DVD"] = *curr_tok;
}
else if(*prev_tok == "ID_TYPE")
{
cout << "Device Type = "<< *curr_tok << "\n";
DeviceDetails["Device Type"] = *curr_tok;
}

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]