[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Поиск файла - Пример

На следующей странице приведен пример использования pathfind(3G).
Пример работает следующим образом:
9    Массивы объявляются как static, так чтобы они инициализировались
нулями.
17-18     Пользователь пытается ввести mode, которая задает
характеристики отыскиваемого файла.
20-21     Пользователь пытается ввести имена директорий для поиска.
Точка (.) интерпретируется как текущая директория. Двоеточие (:) также
интерпретируется как текущая директория, потому что ее ввод добавляет
пустой элемент в список директорий.
23-24     Директории читаются в массив temp.
25-26     Производится проверка, что размер массива, отведенного под
хранение списка директорий, не превысил предельного значения.
29   Новая директория вставляется в конец списка директорий поиска.
30   В конец списка директорий добавляется двоеточие (:),
приготавливая вставку следующей директории.
32   Последнее двоеточие стирается из списка директорий.
33-36     Осуществляется поиск файла, заданного в командной строке, в
списке директорий, введенных пользователем. Если файл найден в одной
из директорий, то печатается имя этой директории.
Программа демонстрируется следующим образом:
$ pathfind ls
Enter mode (CTRL<D> for no mode): rx

Enter directories to be searched
End input with <CTRL/D>
/etc
/bin
/usr/bin
.
/instr/jrs/bin

ls is found in /bin/ls

Файл: pathfind.c
                         ПОИСК ФАЙЛА - ПРИМЕР

 1 #include <stdlib.h>
 2 #include <stdio.h>
 3 #include <libgen.h>
 4 #include <string.h>
 5 #define MAXLEN 256
 6
 7 main(int argc, char *argv[])
 8 {
 9     static char temp[50], dir[MAXLEN], mode[10];
10     char *ptr;
...
17     printf("Enter mode (<CRTL/D> for no mode): ");
18     scanf("%s", mode);
19
20     printf("\nEnter directories to be searched\n");
21     printf("End input with <CTRL/D>\n");
22     for(;;) {
23     if (scanf("%s",temp) == -1)
24         break;
25     if (strlen(dir) + strlen(temp) > MAXLEN) {
26         printf("last input not allowed\n");
27         break;
28     }
29     strcat(dir,temp);
30     dir[strlen(dir)] = ':';
31     }
32     dir[strlen(dir) - 1] = '\0';
33     if ((ptr = pathfind(dir,argv[1],mode)) == NULL)
34     printf("\n%s not found\n",argv[1]);
35     else
36     printf("\n%s found in %s\n",argv[1],ptr);
37     exit(0);
38 }