Увеличивается ли указатель fd, когда я использую его для чтения () или записи () И как можно контролировать приращение? - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь прочитать строку из файла и вернуть указатель на начало следующей строки, но я не понимаю, что происходит с fd, когда я использую его для чтения 10 символов за раз. Я могу использовать только чтение, запись, открытие и mallo c.

Пример file.txt (с явным указанием \n):

Sphinx of black quartz, judge my vow.\n
Pack my box with five dozen liquor jugs.\n
The quick brown fox jumps over the lazy dog.\n

main. c:

int fd = open("file.txt", O_RDONLY);
int fd2 = open("oneline.txt", O_CREAT | O_WRONLY);
char *buffer = (char *)malloc(sizeof(char) * 10);

read(fd, buffer, 10);
write(fd2, &buffer, 10);

1) Будет fd теперь указывать на 11-й символ file.txt и fd2 в EOF для oneline.txt?


Продолжение main. c пример:

int newline = 0, found = 0;
while(found == 0)
{
    read(fd, buffer, 10);
    for(int i = 0; buffer[i] != '\n' || i < 10; i++)
    {
        newline++;
        if(buffer[i] == '\n')
            found = 1;
    }
}

Если fd указывает на 41-й символ в file.txt ( в то время как l oop запускается 4 раза, а '\ n' - 38-й символ). Значение для целого числа newline равно 38.

2) Как я могу заставить fd указывать на 39-й символ, который следует сразу после символа '\ n'?

1 Ответ

3 голосов
/ 23 апреля 2020

Вы говорите о смещении файла . На ваш первый вопрос, да, вы правы относительно того, где смещения находятся в этой точке. На ваш второй вопрос вы можете использовать lseek, чтобы переместить смещение назад. Чтобы go вернуть 2 символа, вы должны сделать lseek(fd, -2, SEEK_CUR).

...