#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); }