Как перенести содержимое файла .gcda в другой файл?

#c #linux #sockets #embedded #gcov

Вопрос:

Я изменил исходный код gcov библиотеки, чтобы интегрировать ее для моей встроенной цели. Я изменил части, где gcov открывается .gcda файл и записывает собранные данные в этот файл. В моем измененном случае он записывает собранные данные в буфер, который я отправляю через сетевой сокет. В моей клиентской части сети я могу успешно принимать данные. Я перепроверил размеры , которые я передал по сети, и размер фактических данных, собранных с помощью неизмененного libgcov , они совпадают!

Моя проблема заключается в том, чтобы открыть .gcda файл в клиентской части и записать данные в мой буфер в .gcda файл. В fwrite(readBuf,sizeof(char),256,file) я не знаю, каков будет размер данных, которые я передал. Является .gcda ли передача файлов двоичными данными или чем-то другим?

Комментарии:

1. Запишите фактический размер данных вместо фиксированного размера. Если вы не знаете ожидаемого размера, вам, возможно, придется изменить сетевой протокол, чтобы каким-то образом передавать информацию о размере.

2. Когда вы сломали библиотеку в том месте, где она открывалась/записывалась в файл, и просто передавалась в двоичном виде, откройте локальный файл в двоичном режиме. На самом деле вы должны использовать возвращаемое значение своей read() /recv() функции. Он возвращает количество прочитанных байтов или 0 в конце. По умолчанию read() / recv() будет блокироваться до тех пор, пока что-то не станет доступным. Затем вы просто записываете количество полученных байтов в свой файл. ssize_t ret; gcdafd= open(filename, "ab "); while((ret = read(sockfd, buf, sizeof(buf))) > 0) { write(gcdafd, buf, ret); }