|
Работа с файлами |
|
|
|
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, 05:23
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Jenya7 @ Oct 18 2017, 17:35)  понял. спасибо. Видимо, не до конца. Цитата Код FILE *global_files[8]; FILE *fsrc; fsrc = open(file_name, O_RDONLY, 0644); global_files[i] = open(fname, O_RDONLY, 0644); Вы видите разницу между open() и fopen()? Первая возвращает целое число, вторая FILE*. То же самое с clocse() и fclose().
|
|
|
|
|
Oct 19 2017, 18:12
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(andrew_b @ Oct 19 2017, 10:23)  Видимо, не до конца.
Вы видите разницу между open() и fopen()? Первая возвращает целое число, вторая FILE*. То же самое с clocse() и fclose(). понял. спасибо. Цитата(k155la3 @ Oct 19 2017, 22:39)  tarExtract(arc_name,0, FALSE);
Посмотрите на декларацию ф-ии. ОНО что, void ? Если есть код возрвата или структура со ссылкой на код и место ошибки - то (ее) его надо обрабатывать. Архив может содржать несколько файлов, а битым окажется один. Соотв-но после ошибки можно попытаться продолжить распаковку остальных. Курите h-файлы и описание интерфейса функции.
ps TAR - насколько знаю, TapeArchive, а на заре электричества ошибки ленточных носителей были "очень и очень". случай когда я упал на распаковке - он ясен. вопрос в другом - может быть битый файл в архиве, который повредился при пересылке, и при этом архив распакуется успешно?
|
|
|
|
Сообщений в этой теме
Jenya7 Работа с файлами Oct 18 2017, 08:21      k155la3 Цитата(Jenya7 @ Oct 18 2017, 17:35) . . .... Oct 19 2017, 17:39       esaulenka Цитата(k155la3 @ Oct 19 2017, 20:39) TAR ... Oct 20 2017, 07:45        Jenya7 Цитата(esaulenka @ Oct 20 2017, 13:45) Ка... Oct 20 2017, 08:43        k155la3 Цитата(esaulenka @ Oct 20 2017, 10:45) Ка... Oct 21 2017, 13:08 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
|
|
|