Могу ли я использовать C, чтобы узнать, выполняется ли файловая операция на диске во время выполнения? - PullRequest
0 голосов
/ 25 декабря 2009

Могу ли я использовать C, чтобы узнать, выполняется ли файловая операция (и где она выполняется) на диске во время выполнения?

Ответы [ 4 ]

1 голос
/ 25 декабря 2009

Ответ на ваш вопрос зависит от того, как вы это имели в виду. Если вы спрашиваете, можете ли вы обнаружить физическую операцию на диске (поиск, чтение или запись), ответ будет отрицательным. Диски имеют дисковый кеш, чтобы скрыть эти операции от вас во имя производительности. Вы можете сказать, когда кэш изменяется, используя механизмы, описанные выше, но не когда физическая операция выполняется.

Вот почему у нас есть журнальные файловые системы. Однако даже при ведении журнала существует вероятность фактической потери данных в случае катастрофического сбоя и невозможности сохранения кэша.

Из вышеперечисленных методов я использовал FileSystemWatcher, и он работает очень хорошо. Вы можете выбрать события, в которых вы хотите получать уведомления о том, что ваша программа получит событие программы, когда событие файла произойдет.

Обратите внимание, что, по крайней мере, в Windows / C # событие приходит в отдельном потоке, поэтому вам придется использовать делегаты, чтобы сообщить основному (или другому) потоку о том, что событие произошло.

1 голос
/ 25 декабря 2009

Вам нужно полагаться на определенные API-интерфейсы ОС, которые вы можете использовать на языке программирования C.

1 голос
/ 25 декабря 2009

Как уже говорили здесь, не существует независимого от платформы / C стандартного способа.

В Linux вы можете использовать inotify api. На IBM developerworks есть учебник .

1 голос
/ 25 декабря 2009

Проверьте следующий образец из MSDN: Изменить образец уведомления наблюдателя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...