Все происходит в Linux Mint
Первый файл записывает в текстовый файл введенный текст
#include <stdio.h>
#include <fcntl.h>
int main()
{
int hfile, length;
char buf[100];
printf("Введите текст:\n");
hfile = open("text.txt", O_WRONLY|O_CREAT, 0600);
if (hfile == -1)
{
printf("Error file");
return 1;
}
length = read(0, buf, 100);
write(hfile, buf, length);
close(hfile);
return 0;
}
Вторая программа открывает тот же файл (созданный перед этим первой программой) для чтения и хэндл, полученный при этом открытии, запоминает в 1-й переменной для хэндла. Используя этот хэндл, далее с помощью функции dup() получается новое значение хэндла для доступа к тому же файлу (2-й хэндл). Еще раз открывается тот же файл, запоминая 3-е значение хэндла. После получения действующих значений всех трех хэндлов программа позиционирует чтение для 10-й позиции файла от начала этого файла, используя при этом первый хэндл. Далее программа должна выводить числовые значения всех трех хэндлов на экран. Используя по очереди все 3 хэндла, из файла читаются по 7 символов и тут же эти три прочитанных текста выводятся на экран, каждая в своей строке.
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
int main()
{
int fhandle1, nhandle, fhandle2;
int len;
char buf[100];
fhandle1 = open("text.txt", O_RDONLY, 0400);
nhandle = dup(fhandle1);
fhandle2 = open("text.txt", O_RDONLY, 0400);
if (fhandle1==-1 || nhandle==-1 || fhandle2==-1)
{
perror("Error file");
return 1;
}
lseek(fhandle1, 10, SEEK_SET);
printf("handle 1: %d\n", fhandle1);
printf("handle 2: %d\n", nhandle);
printf("handle 3: %d\n", fhandle2);
len = read(fhandle1, buf, 7);
write(1, buf, len);
printf("\n");
len = read(nhandle, buf, 7);
write(1, buf, len);
printf("\n");
len = read(fhandle2, buf, 7);
write(1, buf, len);
printf("\n");
close(fhandle1);
close(nhandle);
close(fhandle2);
getchar();
return 0;
}
В файле введено :
Результат работы второго файла:
Почему результат вывода именно такой?