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