Вход/Регистрация
Разработка приложений в среде Linux. Второе издание
вернуться

Троан Эрик В.

Шрифт:

37:

38: /* поиск первого параметры командной строки (который должен

39: находиться после списка путей */

40: i = 1;

41: while (i < argc && *argv[i] != '-') i++;

42:

43: /* обработать опции командной строки */

44: while (i < argc && !problem) {

45: if (!strcmp(argv[i], "-name")) {

46: i++;

47: if (i == argc)

48: problem = 1;

49: else

50: name = argv[i++];

51: } else if (!strcmp(argv[i], "-depth")) {

52: i++;

53: flags |= FTW_DEPTH;

54: } else if (!strcmp (argv[i], "-mount") ||

55: !strcmp(argv[i], "-xdev")) {

56: i++;

57: flags |= FTW_MOUNT;

58: } else if (!strcmp (argv[i], "-mindepth") ||

59: !strcmp (argv[i], "-maxdepth")) {

60: i++;

61: if (i == argc)

62: problem = 1;

63: else {

64: tmp = strtoul(argv[i++], &chptr, 10);

65: if (*chptr)

66: problem = 1;

67: else if (!strcmp(argv[i - 2], "-mindepth"))

68: minDepth = tmp;

69: else

70: maxDepth = tmp;

71: }

72: }

73: }

74:

75: if (problem) {

76: fprintf(stderr, "использование: find <пути> [-name <строка>]"

77: "[-mindepth <целое>] [-maxdepth <целое>]\n");

78: fprintf(stderr, " [-xdev] [-depth]\n");

79: return 1;

80: }

81:

82: if (argc == 1 || *argv[1] == '-') {

83: argv[1] = ".";

84: argc = 2;

85: }

86:

87: rc = 0;

88: i = 1;

89: flags = 0;

90: while (i < argc && *argv[i] != '-')

91: rc |= nftw (argv [i++], find, 100, flags);

92:

93: return rc;

94: }

14.8. Уведомление о смене каталога

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

Системный вызов

fcntl
используется для регистрации уведомлений об обновлениях каталога. В главе 11 уже говорилось о том, что этот системный вызов принимает три аргумента. Первый аргумент — это интересующий файловый дескриптор, второй — это команда, которую необходимо выполнить
fcntl
, а последний — это целое число, специфическое для этой команды. Для уведомлений каталогов первый аргумент является файловым дескриптором, относящимся к интересующему каталогу. Это единственный случай, при котором каталог следует открывать с помощью нормального системного вызова
open
вместо
opendir
. Командой регистрации уведомлений является
F_NOTIFY
, а последний аргумент определяет, какие типы событий вызывают отправку сигнала. Это должен быть один или несколько перечисленных ниже флагов, объединенных по логическому "ИЛИ".

DN_ACCESS
Файл в каталоге, который читается.
DN_ATTRIB
Права владения или доступа к файлу в каталоге были изменены.
DN_CREATE
В каталоге создан новый файл (включая новые жесткие ссылки на уже существующие файлы).
DN_DELETE
Файл удален из каталога.
DN_MODIFY
Файл в каталоге был модифицирован (тип модификации — усечение).
DN_RENAME
Файл в каталоге был переименован.
  • Читать дальше
  • 1
  • ...
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • ...

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

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: