Реализация lseek в xv6 - PullRequest
       48

Реализация lseek в xv6

1 голос
/ 06 июня 2019

Прежде всего, я должен сказать, что вполне возможно, что я что-то упустил. Мое задание состоит в том, чтобы по существу реализовать fprintf. Теперь, когда добавление в файл не требуется, я люблю делать все возможное. Моя проблема в том, что я не могу найти определение lseek в xv6, что означает, что я должен реализовать его самостоятельно, но я искренне не знаю, как это сделать.

Пробовал читать 512 байт за раз в бесконечном цикле, пытаясь переместить курсор в конец, как способ жестко закодировать его, но если файл не открывается с помощью O_RDWR или я пытаюсь это сделать с помощью stdout, это не удается .

Я также пытался написать пустую строку в бесконечном цикле. Знал, что это не сработает, но все равно попробовал.

Я могу довольно хорошо читать xv6 (программы уровня пользователя), но не могу понять исходный код lseek для моей жизни

Это не должно быть искренним поиском. Мне просто нужно иметь возможность добраться до конца fd и продолжить запись, но это не может зависеть от файлового режима.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 06 июня 2019

Я нашел решение.Причина, по которой O_APPEND не работает, заключается в том, что определение open () в sysfile.c ничего не делает с добавлением.В sys_open они жестко кодируют значение 0 для f-> off (offset), и это то, что мне нужно изменить.Мое запланированное решение состоит в том, чтобы определить размер файла (в байтах) файла и установить смещение на это число.Вероятно, собираюсь использовать stat ().

...