Как обнаружить или протестировать создание узла dev в Unix/ Linux для вставки USB-накопителя
Я пишу на C в системе Linux. Я хочу вставить флэш-накопитель USB, позволить udev создавать узлы dev (например, в / dev / sdc и /dev/sdc1) и выполнять действия только при появлении / dev / sdc. Я думал об этом как о цикле ожидания в моем C-приложении, ожидающем создания узла dev демоном udev. Что-то вроде следующего:
if( /* /dev/sdc exists */)
{
do_something();
}
else
{
wait();
}
Моя первая проблема в том, что функция библиотеки C может пойти в моем тесте if(), чтобы вернуть значение для "/dev/sdc существует". Моя вторая проблема, я просто неправильно подхожу к этому? Должен ли я использовать структуру монитора udev, чтобы обнаружить это прямо из udev?
2 ответа
Возможно, вы захотите взглянуть на fstat() из стандартной библиотеки. Это позволяет вам выполнить быструю и грязную проверку наличия / отсутствия файла и действовать в соответствии с этим. в основном вам нужно:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
....
struct stat s;
stat( "/pat/to/node" , &s );
if ( IS_BLK(s.st_mode) ) {
/* the file exists and is a block device */
}
Это не элегантное решение, но отвечает на ваш вопрос. Код может нуждаться в некоторой настройке, потому что я не пробовал, но он должен сделать свое дело.
Приветствия.
Вы, вероятно, хотите использовать правила udev.
Запуск внешних программ при определенных событиях
Еще одна причина написания правил udev - запуск определенной программы, когда устройство подключено или отключено. Например, вы можете захотеть выполнить скрипт для автоматической загрузки всех ваших фотографий с цифровой камеры, когда она подключена.