Как записать в al oop в двоичный файл в C сокеты - PullRequest
0 голосов
/ 14 марта 2020

У меня есть следующий фрагмент, где я читаю отправленные байты, используя read(), и сохраняю данные в буфере, который работает хорошо. Но как мне сделать так, чтобы я мог продолжать писать в двоичном файле после каждого чтения. Я предполагаю, что это может быть связано с тем, чтобы не сбрасывать буфер. Спасибо за помощь!

fp = fopen (filename, "wb"); //create a file

while (size > 0){        
    n = read(socket,buffer,size*sizeof(char));
    if (n <=0)
        return -1;
    p += n;
    size -= n;

    fwrite(buffer,sizeof(char),size*sizeof(char),fp); //write the content to the file

}

1 Ответ

1 голос
/ 14 марта 2020

Вы должны использовать n при вызове fwrite(), а не size. n - это количество, которое вы только что прочитали из сокета, size - это сколько еще байтов вы все еще ожидаете.

fwrite(buffer,sizeof(char),n,fp);

Вы также не должны умножаться на sizeof. Второй аргумент - размер каждого элемента, третий аргумент - количество элементов; fwrite() выполняет умножение внутри. Это работает в вашем случае, потому что sizeof(char) всегда 1, поэтому умножение ничего не изменило.

...