[問題] socket read 和 scanf

看板C_and_CPP作者 (啊啊啊啊啊~)時間11年前 (2014/03/08 09:20), 編輯推噓0(007)
留言7則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux gcc 問題(Question): 最近在學習架server的一個小課題 大概內容就是架個小server 接收client傳來的要求然後回傳文件而已 我的問題是 client傳來的stream我只需要部分而已 一般用socket的話應該都是用read()或recv()讀 可是我覺得我的狀況用scanf()比較方便 因為遇到空格換行會自己停 問題是scanf系列需要一個指標 而在socket裡基本上都是用fd/sd之類的description操作的 不知道要去哪生個指標出來... 雖然可以先read進一個buffer再用scanf 可是不知道究竟要讀多少 很怕它讀到的剛好斷在string中間 這種情況 我應該不管三七二十一給它個大buffer讀下去嗎? 還是有什麼別的方法? 請給我一點建議 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 142.244.177.122

03/08 10:16, , 1F
http://goo.gl/D4rpCI 你可以試試 不過我還是要說一
03/08 10:16, 1F

03/08 10:17, , 2F
下 scanf就是把資料讀到buf才有辦法斷在空格的
03/08 10:17, 2F

03/08 11:59, , 3F
stdio在底層buffer,如果用select會出問題,可能資料進來了,但
03/08 11:59, 3F

03/08 12:10, , 4F
select還在空等,並且每次fprintf後要flush,fscanf後要seek
03/08 12:10, 4F

03/08 12:12, , 5F
除非每個fd開兩個FILE,一個r一個w,但底層的buffer問題還在
03/08 12:12, 5F

03/08 12:33, , 6F
或是用setvbuf()的_IONBF取消buffer試試
03/08 12:33, 6F

03/09 01:02, , 7F
哦哦謝謝 我試試!
03/09 01:02, 7F
文章代碼(AID): #1J6d17AV (C_and_CPP)