[<<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 }