2012-09-30 2 views
0

Я относительно хороший программист на Java, но совершенно новый для C. Таким образом, некоторые из этих функций, указатели и т. Д. Дают мне некоторые проблемы ...Запись информации из файлов в файл архива?

Я пытаюсь создать файл архива (I ' m в основном перезаписывает вызов ar sys). Я могу fstat файлы, которые я хочу, хранить необходимую информацию в структуре, которую я определил. Но теперь наступает моя проблема. Я хочу написать структуру в файл архива. Поэтому я думал, что могу использовать sprintf(), чтобы поместить мою структуру в буфер, а затем просто написать буфер.

sprintf(stat_buffer, "%s", file_struct); 
write(fd, stat_buffer, 60); 

Это не работает. Я могу сказать, что размер архивного файла увеличивается на желаемые 60 байт, но если файл cat, он печатает бессмыслицу.

Кроме того, пытаясь написать фактическое содержимое файла не работает, либо ...

while (iosize = read(fd2, text_buffer, 512) > 0) { 
     write(fd, text_buffer, iosize); 
     if (iosize == -1) { 
      perror("read"); 
      exit(1); 
     } 
    } 

Я уверен, что это относительно легко исправить, просто интересно, что это такое!

Спасибо!

+0

после записи() буфер ввода/вывода не сбрасывается. поэтому попробуйте fflush(), когда захотите заглянуть в файл извне. –

ответ

2

%s используется для печати строки. Таким образом, спринт остановится, когда он встретится с персонажем \0.

Вместо этого вы можете напрямую написать свою структуру в свой файл. write(fd, &file_struct, sizeof(filestruct));, но вы не сможете прочитать его с кошачьим звонком. Вы по-прежнему можете, из другой программы unarchiver, прочитать содержимое файла и сохранить его в структуре. read(fd, &filestruct, sizeof(filestruct));

Эта система не идеальна в любом случае, поскольку она сохранит структуру с вашего компьютера endianess и не будет переносной. Если вы хотите сделать это правильно, ознакомьтесь с ar file format specification.

+0

Я разработал мою структуру так, как она определена в ar. Ваш запрос на запись, который вы мне дали, дал следующую ошибку во время компиляции: ошибка: несовместимый тип для аргумента 2 записи /usr/include/unistd.h:363:16: note: ожидается const void *, но аргумент имеет тип struct file_struct –

+0

Я забыл поставить & знак. Запись 2-го аргумента - это указатель на фрагмент памяти, который вы хотите записать в файл. Третий даст количество необходимых байтов памяти. – tomahh

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