[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Чтение символической связи - пример

Программа на следующей странице демонстрирует системные вызовы
symlink(2) и readlink(2). Она работает так:
17-20     Создается файл символической связи. Имя связи с файлом,
указанным первым параметром в командной строке, - это второй параметр
в командной строке.
22-25     Файл символической связи используется как аргумент
системного вызова open(2). Поскольку open(2) следует символическим
связям, файл переданный в качестве первого аргумента в командной
строке будет открыт для чтения. Содержимое файла считывается и
распечатывается.
31-34     Файл символической связи используется как аргумент
системного вызова readlink(2). Поскольку readlink(2) не следует
символическим связям, считывается содержимое блоков данных файла
символической связи.
36-37     Содержимое файла символической связи распечатывается.
Эта программа демонстрируется так:
$ cat datafile
12345
abcde
$ symlink /usr1/jrs/datafile symdata
contents of datafile:
12345
abcde

contents of symdata: /usr1/jrs/datafile

Файл: symlinks.c
                 ЧТЕНИЕ СИМВОЛИЧЕСКОЙ СВЯЗИ - ПРИМЕР

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 #include <stdlib.h>
 4 #include <fcntl.h>
 5 #define LEN 255
 6
 7 main(int argc, char *argv[])
 8 {
 9     char buf[LEN];
10     int n, fd;
...
17     if (symlink(argv[1],argv[2]) == -1) {
18     perror(argv[0]);
19     exit(1);
20     }
21
22     if ((fd = open(argv[2],O_RDONLY)) == -1) {
23     printf("can't open %s\n", argv[2]);
24     exit(2);
25     }
26
27     printf("contents of %s:\n", argv[1]);
28     while ((n = read(fd,buf,255)) != 0)
29     printf("%.*s",n,buf);
30
31     if ((n = readlink(argv[2], buf, LEN)) == -1)  {
32     printf("readlink fails on %s\n", argv[2]);
33     exit(3);
34     }
35
36     printf("\ncontents of %s: ",argv[2]);
37     printf("%.*s\n", n, buf);
38 }