Как обнаружить или протестировать создание узла 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 - запуск определенной программы, когда устройство подключено или отключено. Например, вы можете захотеть выполнить скрипт для автоматической загрузки всех ваших фотографий с цифровой камеры, когда она подключена.

Другие вопросы по тегам