Я написал 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;
}
Задача ещё не решена.