最近學弟學妹們在寫聊天室,期間遇到了很多問題,也「逼迫」我們這些大二(其實即將大三)狗考慮了許多以前沒有考慮過的東西。現在就著我們小組的聊天室的專案,送給學弟學妹們」幾個可能安全的封裝函式。「
ssize_t sendlen(int fd, const void *buf, size_t len, int flags)
sum += n;
ptr += n;
}return (sum);
}
ssize_t recvlen(int fd, void *buf, size_t len, int flags)
else
if (n == 0)
sum += n;
ptr += n;
}return (sum);
}
static
int recv_cnt = 0;
static
char *recv_ptr = null;
static
char recv_buf[maxline];
static ssize_t my_recv(int fd, char *ptr, int flags)
else
if (recv_cnt == 0)
recv_ptr = recv_buf;
}recv_cnt--;
*ptr = *recv_ptr++;
return (1);
}ssize_t recvline(int fd, void *vptr, size_t maxlen, int flags)
else
if (rc == 0)
else
return (-1);
}*ptr = 0;
return (n);
}ssize_t recvline(int fd, void *buf, size_t maxlen, int flags)
注意事項:static int recv_cnt = 0; //讀取的資料量
static char *recv_ptr = null; //指向recv_buf的位元組型指標
static char recv_buf[maxline]; //存放讀取資料的結構
recvline
函式從recv_buf
中拿到一行資料 。
my_recv
函式檢查如果讀取的資料量<=0
,就進行一次讀取。問:這裡為什麼要用recv
而不用自己封裝的recvlen
? 因為recvlen
直到讀取len
個位元組才會返回,而我們這裡並不要求,只要讀取從緩衝區中讀取比maxline
小的位元組就行了 。
if (recv_cnt <= 0)
else
if (recv_cnt == 0)
recv_ptr = recv_buf;
}
C語言結構體封裝函式指標
c語言結構體 struct 從本質上講是一種自定義的資料型別,只不過這種資料型別比較複雜,是由 int char float 等基本型別組成的。例如,在校學生有姓名 年齡 身高 成績等屬性,學了結構體後,我們就不需要再定義多個變數了,將它們都放到結構體中即可,如圖所示 那麼我們怎麼用c語言的結構體來...
C語言函式的封裝 未完待續
堅持 成長 每日一篇 返回 1表示讀取失敗,注意返回的資料是帶 n。else if ret 0 else return offset 讀取固定位元組,都到結尾返回已讀子節數,1表示讀取失敗 else if ret 0 else return offset 成功返回連線成功後的套接字,失敗返回 1。i...
C語言庫函式一
由於c語言本身可以說是一門非常輕量化的程式語言,語言本身提供的內容非常有限,當然這也促成了靈活小巧的特點。c語言有很大一部分特性都不是通過語言性質來實現的,而是通過庫函式來實現的,如果不使用庫函式幾乎無法編寫出任何可用的c語言程式來。c語言官方提供的庫函式,被稱之為標準庫函式。標準庫函式中實現了我們...