Как обнаружить или протестировать создание узла dev в Unix / Linux для вставки USB-накопителя - PullRequest
2 голосов
/ 12 августа 2011

Я пишу на 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 ]

2 голосов
/ 12 августа 2011

Возможно, вы захотите взглянуть на 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 */
}

Это не элегантное решение, но отвечает на ваш вопрос. Код, возможно, нуждается в некоторой настройке, потому что я не пробовал, но он должен сделать свое дело.

Приветствие.

1 голос
/ 12 августа 2011

Возможно, вы хотите использовать правила udev.

Запуск внешних программ при определенных событиях

Еще одна причина написания правил udev - запуск определенногопрограммировать, когда устройство подключено или отключено.Например, вы можете захотеть выполнить скрипт для автоматической загрузки всех ваших фотографий с цифровой камеры, когда она подключена.

...