Мне трудно понять, почему lseek
не работает должным образом.По сути, все, что мне нужно сделать, это взять данные из стандартного ввода, сохранить их в файле с именем «log.txt» и позволить программе остановиться, когда встречается слово «STOP».
Моя проблема в том, что япопытаться запустить программу, я получаю ошибку lseek: незаконный поиск, и я не знаю почему.Я думал, что проблема была в вызове lseek, но если я заменил lseek(fd, 0, SEEK_END)
на lseek(fd, atol(0), SEEK_END)
, я получил ошибку сегментации.
Я просто так растерялся, я не знаю, как поступить, чтобы это исправить, надеюсь, вы могли бы дать свой совет.
int fd;
char buffer[SIZE];
int n, cur;
if (fd = open("log.txt", O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO) < 0)
{
perror("Error: open");
return 1;
}
if ((cur = lseek(fd, 0, SEEK_END)) < 0)
{
printf("Offset corrente: %d\n", (int) lseek(fd, SIZE, SEEK_CUR));
perror("Error: lseek");
return 2;
}
while ((n = read(fd, buffer, SIZE)) > 0 && (strncmp(buffer, "STOP", 4) != 0))
{
write(fd, buffer, SIZE);
}