реклама на сайте
подробности

 
 
> Работа с файлами
Jenya7
сообщение Oct 18 2017, 08:21
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andrew_b
сообщение Oct 18 2017, 08:47
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 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 */
...
};


Цитата
Но я не нашел функции копирования файла в файл. Все функции копирования либо масив-масив либо файл-масив либо масив-файл.
Ну да. Всё руками.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 18 2017, 09:09
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 18 2017, 12:53
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Jenya7 @ Oct 18 2017, 12:09) *
нашел ф-цию для копирования
STATUS cp(const char * src, const char * dest);
но если src известен что я передаю в качестве dest?
Вестимо имя файла (с путем), куда вы хотите скопировать свой исходный файл.

Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 18 2017, 12:59
Сообщение #5


Профессионал
*****

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



Цитата(XVR @ Oct 18 2017, 17:53) *
Вестимо имя файла (с путем), куда вы хотите скопировать свой исходный файл.

а какое у него имя? вот я его создал FILE global_files[8]; я должен инициализировать файлы? А как? Я не нашел в структуре FILE член имя файла.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Oct 18 2017, 14:28
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Jenya7 @ Oct 18 2017, 15:59) *
вот я его создал FILE global_files[8]
Это неправильно. Не смотрите на FILE как на структуру. Используйте указатели FILE *. Объект типа FILE* создаётся функцией fopen().
Цитата
Я не нашел в структуре FILE член имя файла.
Там его и нет.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 18 2017, 14:35
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 19 2017, 17:39
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 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, а на заре электричества ошибки ленточных носителей
были "очень и очень".
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Oct 20 2017, 07:45
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(k155la3 @ Oct 19 2017, 20:39) *
TAR - насколько знаю, TapeArchive, а на заре электричества ошибки ленточных носителей были "очень и очень".


Как же я люблю людей, которые документацию читать не умеют, зато на основе "богатого жизненного опыта" делают какие-то выводы...
https://www.gnu.org/software/tar/manual/htm...ion/tar_84.html


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 21 2017, 13:08
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 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.

По указанной Вами ссылке.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 21:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.0166 секунд с 7
ELECTRONIX ©2004-2016