2013-02-12 5 views
-6

Прямо сейчас, когда я снова и снова использую системный вызов, он просто добавляет в файл, позволяет вызывать файл .txt, если я должен был вызвать вызов вызова sys в C, на file.txt , это было бы просто постоянно. Существует тот факт, что, учитывая тот же файл, я хочу стереть с него все и добавить только одну строку. Как я могу это сделать? Я не хочу создавать новый файл, я хочу работать в том же файле.C системные вызовы, удалите файл

Спасибо!

+2

Вы должны сделать фундаментальные исследования функций, которые вы используете перед публикацией здесь. SO не «Я слишком ленив, чтобы читать man-страницы или даже google имя функции, помогите мне» .com –

+1

Этот вопрос нуждается в коде. –

+0

Прочитайте все [об] (http://stackoverflow.com/about) ТАК, чтобы избежать опроса ваших вопросов. – Nocturno

ответ

1

Просто позвоните truncate или ftruncate, чтобы разрезать файл на нулевые байты. Затем напишите нужную строку. Вам не нужно закрывать или повторно открывать файл, вы можете использовать существующий дескриптор.

+0

Предположим, что файл открыт, мне нужно будет снова выполнить команду open с переданным ей усечением? – user1888502

+0

Нет, просто позвоните 'ftruncate'. –

1

Поведение зависит от того, в каком режиме был открыт файл: похоже, что вы в данный момент открыты в режиме append; вам нужно открыть как обычную запись, чтобы получить желаемое поведение.

+0

Так что, имея его в записи, будет строго переписывать его содержимое вправо? – user1888502

0

Когда вы вызываете fopen(), вам необходимо передать ему соответствующий режим: читать, писать, добавлять и т. Д. Вот хороший обзор fopen().

1

Pass O_TRUNC к open() или пройти "w", "wb", "w+", "wb+" или "w+b" к fopen().

Смежные вопросы