У меня есть следующий фрагмент кода (это "пример" кода, так что ничего особенного):
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
char buffer[9];
int fp = open("test.txt", O_RDONLY);
if (fp != -1) // If file opened successfully
{
off_t offset = lseek(fp, 2, SEEK_SET); // Seek from start of file
ssize_t count = read(fp, buffer, strlen(buffer));
if (count > 0) // No errors (-1) and at least one byte (not 0) was read
{
printf("Read test.txt %d characters from start: %s\n", offset, buffer);
}
close(fp);
}
int fp2 = open("test.txt", O_WRONLY);
if (fp2 != -1)
{
off_t offset = lseek(fp2, 2, SEEK_CUR); // Seek fraom current position (0) - same result as above in this case
ssize_t count = write(fp2, buffer, strlen(buffer));
if (count == strlen(buffer)) // We successfully wrote all the bytes
{
printf("Wrote to test.txt %d characters from current (0): %s\n", offset, buffer);
}
close(fp2);
}
}
Этот код не возвращает первую распечатку (чтение) как есть, а вторая распечатка гласит: «Записал в test.txt 0 символов из текущего (0):», что указывает на то, что он нигде не искал в файле и что буфер пуст. .
Странно то, что если я закомментирую все, начиная с fp2 = open("test.txt", O_WRONLY);
, первая распечатка вернет то, что я ожидал. Как только я включу второй оператор open
(даже ни с чем другим), он не запишет его. Это как-то переупорядочивает открытые операторы или что-то еще?