寫一個完整緩衝區我想寫write system call在使用TCP套接字充滿BUFF_SIZE
字節的緩衝區:使用write()系統調用
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
寫( )將寫入字節,從緩衝器指向的buf計數到文件描述符fd引用的文件。
當然,寫入的實際的字節數可以通過返回值檢測出來。但是,如果我想確保我的整個字節緩衝區通過連接發送,那麼執行此操作的好方法是什麼?到目前爲止,我在想:
while ((ch = fgetc(pipe)) != EOF)
{
buff[ 0 ] = ch;
bytes_in_buff++;
// fill a buffer's worth of data from the pipe
for (int i = 1; i < BUFF_SIZE; ++i, ++bytes_in_buff)
{
if ((ch = fgetc(pipe)) == EOF)
break;
buff[ i ] = ch;
}
// write that buffer to the pipe
int bytes_sent = 0;
while (bytes_sent < BUFF_SIZE)
{
bytes_sent = write(fd, buff, bytes_in_buff);
}
}
當然不過,一些多餘字節將被髮送,如果我繼續每次bytes_sent < BUFF_SIZE
發送整個緩衝區。
是您當系統調用被阻塞然後中斷時,最後一段爲真?如果中斷,系統調用的實現是否會自動重啓I/O? – jxh
@jxh對不起,我不記得在那個詳細程度的討論,但在我看來,它不應該重新啓動。它如何建議中斷和在中斷之前傳輸的字節數一直是我的一個謎。 – EJP