Мне нужно разделить большое изображение или текстовый файл на несколько кусков 10 байт. Эти куски будут отправляться через UDP на сервер. Проблема в следующем: 1. Не уверен в этом коде. Является ли это хорошим способом разделения файлов? 2. Использование памяти программ довольно велико. 400 КБ только для этой функции.Это правильный способ разделения большого файла?
int nChunks = 0;
char chunk[10];
FILE *fileToRead;
fileToRead = fopen(DEFAULT_FILENAME, "rb");
while (fgets(chunk, sizeof(chunk), fileToRead)) {
char *data = malloc(sizeof(chunk));
strcpy(data, chunk);
packet *packet = malloc(sizeof(packet));
packet->header = malloc(sizeof(packetHeader));
packet->header->acked = 0;
packet->header->id = ++nChunks;
packet->header->last = 0;
packet->header->timestamp = 0;
packet->header->windowSize = 10;
packet->data = data;
list_append(packages, packet);
}
typedef struct packetHeader{
...
}packetHeader;
typedef struct packet{
packetHeader *header;
void *data;
}packet;
yup, выглядит хорошо для меня. переместите 'malloc' вне цикла while. чтение в байтах из потока 'FILE' в буфер, а затем повторное использование буфера. :) –
400KB не о чем беспокоиться - даже телефоны имеют несколько ГБ. – suspectus
это тесто для бесплатных 'header' и' data' после 'list_append –