|
Работа с файлами |
|
|
|
Oct 18 2017, 08:21
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Я получаю файлы с компьютера. Мне приходит tar файл. Я распаковываю его и тут возникает вопрос Как можно проверить на стороне эмбедед, что файл не повредился при передаче? Есть CRC для файлов? Еще такой вопрос. Мне нужно скопировать полученные файлы в другое место и удалить их. Но я не нашел функции копирования файла в файл. Все функции копирования либо масив-масив либо файл-масив либо масив-файл. Код FILE global_files[8];
void CopyFiles(void) { FILE local_files[8];
for (int i = 0; i < 8; i++) { copy (global_files[i], local_files[i]); //??? copy (char*, char*) - аргументы массивы } } Может можно сделать просто Код copy ((char)*global_files[i], (char)* local_files[i]);
Сообщение отредактировал Jenya7 - Oct 18 2017, 08:43
|
|
|
|
|
 |
Ответов
|
Oct 18 2017, 08:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Jenya7 @ Oct 18 2017, 11:21)  Я получаю файлы с компьютера. Мне приходит tar файл. Я распаковываю его и тут возникает вопрос Как можно проверить на стороне эмбедед, что файл не повредился при передаче? Есть CRC для файлов? Ну если вы распаковываете tar, должны знать, что в каждом блоке есть контрольная сумма. Код struct posix_header { /* byte offset */ ... char chksum[8]; /* 148 */ ... }; Цитата Но я не нашел функции копирования файла в файл. Все функции копирования либо масив-масив либо файл-масив либо масив-файл. Ну да. Всё руками.
|
|
|
|
|
Oct 18 2017, 09:09
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(andrew_b @ Oct 18 2017, 13:47)  Ну если вы распаковываете tar, должны знать, что в каждом блоке есть контрольная сумма. Код struct posix_header { /* byte offset */ ... char chksum[8]; /* 148 */ ... }; а как мне вытащить контрольную сумму? Цитата(andrew_b @ Oct 18 2017, 13:47)  Ну да. Всё руками. Руками получается так Код FILE global_files[8];
STATUS TFTP_ProcessFiles(char *arc_name, char *file_name) { int loc_fd, glob_fd; char buf[TFTP_BUFF_SIZE]; tarExtract(arc_name,0, FALSE); for (int i = 0; i < TFTP_FILES_COUNT; i++) { strcat(file_name, (char *)48+i); loc_fd = open(file_name, O_RDONLY, 0644); glob_fd = open ???? read(loc_fd, buf, TFTP_BUFF_SIZE); write(glob_fd, buf, TFTP_BUFF_SIZE); close(loc_fd); close(glob_fd); remove(loc_fd); } return OK; } проблема тут glob_fd = open ????. как мне взять дескриптор глобального файла? он определен но не инициализирован. нашел ф-цию для копирования STATUS cp(const char * src, const char * dest); но если src известен что я передаю в качестве dest?
Сообщение отредактировал Jenya7 - Oct 18 2017, 11:00
|
|
|
|
|
Oct 18 2017, 14:28
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Jenya7 @ Oct 18 2017, 15:59)  вот я его создал FILE global_files[8] Это неправильно. Не смотрите на FILE как на структуру. Используйте указатели FILE *. Объект типа FILE* создаётся функцией fopen(). Цитата Я не нашел в структуре FILE член имя файла. Там его и нет.
|
|
|
|
|
Oct 18 2017, 14:35
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(andrew_b @ Oct 18 2017, 19:28)  Это неправильно. Не смотрите на FILE как на структуру. Используйте указатели FILE *. Объект типа FILE* создаётся функцией fopen(). Там его и нет. понял. спасибо. ну как то так Код FILE *global_files[8]; FILE *fsrc;
for (i = 0; i < TFTP_FILES_COUNT; i++) { strcat(file_name, (char*)48+i); fsrc = open(file_name, O_RDONLY, 0644); global_files[i] = open(fname, O_RDONLY, 0644); cp(fsrc, global_files[i]); close(fsrc); close(global_files[i]); remove(fsrc); } я тут подумал. если я распаковал файлы успешно tarExtract( "/ram0/TFTP_FILES/test.tar", 0, FALSE); - это уже само по себе означает что архив пришел неповрежденный, иначе я бы упал на распаковке. может быть такой случай что файлы в tar повредились и тем не менее архив распаковался успешно?
Сообщение отредактировал Jenya7 - Oct 18 2017, 15:24
|
|
|
|
|
Oct 19 2017, 17:39
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Цитата(Jenya7 @ Oct 18 2017, 17:35)  . . . я тут подумал. если я распаковал файлы успешно tarExtract( "/ram0/TFTP_FILES/test.tar", 0, FALSE); - это уже само по себе означает что архив пришел неповрежденный, иначе я бы упал на распаковке. может быть такой случай что файлы в tar повредились и тем не менее архив распаковался успешно? tarExtract(arc_name,0, FALSE); Посмотрите на декларацию ф-ии. ОНО что, void ? Если есть код возрвата или структура со ссылкой на код и место ошибки - то (ее) его надо обрабатывать. Архив может содржать несколько файлов, а битым окажется один. Соотв-но после ошибки можно попытаться продолжить распаковку остальных. Курите h-файлы и описание интерфейса функции. ps TAR - насколько знаю, TapeArchive, а на заре электричества ошибки ленточных носителей были "очень и очень".
|
|
|
|
|
Oct 21 2017, 13:08
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Цитата(esaulenka @ Oct 20 2017, 10:45)  Как же я люблю людей, которые документацию читать не умеют, зато на основе "богатого жизненного опыта" делают какие-то выводы... https://www.gnu.org/software/tar/manual/htm...ion/tar_84.htmlНу и что не так ? Цитата GNU Tar . . . Initially, tar archives were used to store files conveniently on magnetic tape. По указанной Вами ссылке.
|
|
|
|
Сообщений в этой теме
Jenya7 Работа с файлами Oct 18 2017, 08:21      andrew_b Цитата(Jenya7 @ Oct 18 2017, 17:35) понял... Oct 19 2017, 05:23       Jenya7 Цитата(andrew_b @ Oct 19 2017, 10:23) Вид... Oct 19 2017, 18:12        andrew_b Цитата(Jenya7 @ Oct 19 2017, 21:12) вопро... Oct 20 2017, 05:26         Jenya7 Цитата(andrew_b @ Oct 20 2017, 11:26) Тео... Oct 20 2017, 07:33        Jenya7 Цитата(esaulenka @ Oct 20 2017, 13:45) Ка... Oct 20 2017, 08:43 Jenya7 Такой вопрос. Я должен прочитать из файла провероч... Nov 14 2017, 06:41 XVR Цитатаchar *checksum_buff = "";Так нельз... Nov 14 2017, 08:32 k155la3 Код[quote] while ( (c = fgetc... Nov 14 2017, 09:32 Jenya7 Цитата(k155la3 @ Nov 14 2017, 14:32) Код... Nov 14 2017, 09:48
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|