Мне нужно прочитать содержимое двоичного файла в буфер, выполнить операцию над этим буфером, а не переписывать содержимое этого же файла с выходным буфером.Перезапись файла с использованием O_TRUNC
#include <fcntl.h>
#define BUFFSIZE 1024
char in[BUFFSIZE],
out[BUFFSIZE];
void main(char argc, char **argv)
{
int file = open(argv[1], O_RDONLY);
int size = read(file, in, BUFFSIZE);
hash(in, out, size);
close(file);
file = open(argv[1], O_WRONLY, O_TRUNC);
write(file, out, size);
close(file);
}
Если открыть файл с помощью O_RDWR
, а затем использовать write()
, мой выходной буфер добавляется в конец файла. Если я закрываю и повторно открываю файл с O_TRUNC
, он не усекает его - выходной буфер меньше ввода, поэтому остаток старого содержимого можно увидеть в конце файла. С другой стороны, использование O_WRONLY
делает файл, к которому у меня нет разрешения на запись. Я знаю, как это сделать, используя fopen()
и fprintf()
, но я хотел бы избежать этого и, если возможно, избежать ненужного закрытия (используйте какую-то перемотку).
Я думаю, что вы хотели бы использовать lseek для позиционирования указателя файла при начале файла при его переписывании. –