2013-10-10 3 views
1

извините, если это глупый вопрос, но я немного неопытный C. Я пытаюсь создать простое соединение TCP/TCP. Вот как это работает: на сервере хранится несколько файлов, включая .txt и .jpg. Когда клиент хочет одного из них, он отправляет имя файла на сервер, считывая и записывая его в определенное место.Удалить первые слова из файла

Все работает нормально, за исключением того факта, что ответ сервера «RES данные о статусе состояния». Меня интересуют только данные , чтобы создать новый файл, но я не могу отказать в записи RES размеру статуса в выходной файл. Я пытался использовать strtok, но из-за этого получаю segfault, не знаю почему. Это раздел кода, в котором я получаю ответ от сервера и начинаю писать его в новый файл fp.

while(success == 0) 
    { 
     while(f_block_sz = recvfrom(fd2, buffer, sizeof(buffer), 0, (struct sockaddr*)&serveraddr2, &addrlen)) 
     { 


      if(f_block_sz < 0) 
      { 
       printf("Receive file error.\n"); 
       break; 
      } 
      int write_sz = fwrite(buffer, sizeof(char), f_block_sz, fp); 
      if(write_sz < f_block_sz) 
      { 
       printf("File write failed.\n"); 
       break; 
      } 
      bzero(buffer, LENGTH); 
     } 

     printf("ok!\n"); 
     success = 1; 
     fclose(fp); 
    } 

Я даже не знаю, что лучше. Должен ли я удалить эти «бесполезные» слова перед тем, как писать в новый файл, или мне нужно отредактировать файл после его завершения?

Заранее спасибо.

ответ

1

Я не уверен, но я просто подумал, что если ваш «RES размер статус» имеет фиксированный размер, скажем, «х» байт, то при записи в выходной файл просто пропустить х байт полученных данных ...

int write_sz = fwrite(buffer + x, sizeof(char), f_block_sz, fp); 

Я не уверен, что это хорошая практика или даже исправление, я просто отдал свою мысль.

+0

Хм, интересно. Благодаря! Даже не подумал об этом. К сожалению, размер может быть от 1 до примерно 23000. Может ли быть способ прочитать, сколько символов до третьего «»? – bex91

+0

нравится, сколько символов до 3-го "" или "пробела" ...? –

+0

Точно. Я теперь думаю сделать что-то вроде этого: 'для (г = 1;; г ++) { fscanf (FP + 7, "% С", &c); если (с ==» «) возвращение г; еще fp ++; } '}' Это, наверное, неправильно, но я думаю, что вы поняли, что я хочу начать проверку строки после «RES ok», и когда я доберусь до «пробела», у меня будет начало данных Я бы заменил x на значение g.Я думаю, что это правильно? – bex91

Смежные вопросы