2013-07-19 2 views
-3

Может ли кто-нибудь указать мне в правильном направлении, как добавить несколько файлов в файл архива в C?Добавить файл в конец архива в C

Ниже я собираюсь это сделать. Не могли бы вы сообщить мне, правильно ли это (если нет, можете ли вы сообщить мне, что это лучший способ)? Большое спасибо!

-Использование Открыть, чтобы открыть файл архива (O_RDONLY | O_WRONLY | O_APPEND) -Использование WRITE написать обычный файл в архив

+1

Какой «архив»? Архив 'tar'? Архив 'ar'? Zip? 7zip? Что-то другое? –

+1

Любой конкретный тип архива? –

+0

это архивный файл - например. text.a – user2203774

ответ

1

Вы должны будем надеяться иметь заголовочный файл с именем системы ar.h (обычно расположенный в /usr/include/) , если вы проверите, что увидите формат архивных файлов.

Каждый файл в архиве представляет собой структуру ar_hdr, за которой следуют данные содержимого файла. Поэтому, чтобы добавить файл в архив, вы просто пишете правильную структуру, за которой следует содержимое файла, который вы хотите добавить.

+0

Спасибо за подсказку! Я действительно борюсь с моим домашним заданием. Не могли бы вы рассказать мне, что вы подразумеваете под «написанием правильной структуры, за которой следует содержимое файла, который вы хотите добавить»? – user2203774

+0

Да, это почти верно. Хотя я не изучал формат файла в Linux (предположительно, в ОС опроса), в Solaris, если имя файла больше определенной длины, оно хранится в таблице символов вместо записи заголовка файла. –

0

Чтобы добавить файлы (или даже один файл) в файл архива, сначала необходимо указать формат архива. Если вы изучили документацию по файловому формату, предоставленную вашей ОС (как было рекомендовано в this answer к вашему предыдущему вопросу), то вы уже должны знать достаточно о формате файла, который вам не нужно спрашивать, как сделай это.

C не имеет функций с именем OPEN или WRITE. однако существует open() и write(), однако следует иметь в виду, что O_RDONLY|O_WRONLY не эквивалентен O_RDWR. Вы можете использовать write() для записи содержимого файла в конец архива, но (а) не забудьте сначала записать заголовок файла, и (b) вы уверены, что вам не нужно обновить таблицу символов в архиве? (Если вы это сделаете, вам может потребоваться переписать весь файл.)

Почему вы просто не используете служебную программу командной строки ar?

+0

@ Elchonon Edelson: Спасибо за ответы на мои вопросы. Для моего школьного задания мне нужно написать код на C, который работает так же, как и команды ar (например, ar -t и ar -q). К сожалению, ни одна из моих лекций класса или классных заметок не говорит о ar.h, и я очень смутился. Я потратил много времени на поиск ответа. Я посмотрел файл ar.h на своем ноутбуке. Имея ограниченный опыт программирования (3 четверти в школе), мне действительно трудно понять, как работать с архивами. Если вы знаете какой-либо учебник по работе с архивными файлами и ar.h, пожалуйста, дайте мне знать. Спасибо. – user2203774

+0

Работа с архивными файлами в основном такая же, как работа с любым файлом, который имеет определенную структуру. Вам нужна документация, объясняющая структуру содержимого файла, и вы пишете код, чтобы соответствовать этой структуре. В этом случае структура файла является собственностью, и я не смог найти документацию для файловой структуры, используемой библиотекой GNU. Документация для этого файла, используемая Oracle Solaris 10, находится здесь (http://docs.oracle.com/cd/E26505_01/html/816-5173/ar-3head.html), библиотека GNU может отличаться. –

+0

Большое спасибо за ссылку! – user2203774

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