我想在C中編寫代碼,其中我想從套接字讀取數據,但我不知道數據的長度。我無法控制數據發件人。套接字讀取和未知長度的數據
是否有任何方式讀取使用未知長度讀取套接字讀取?
以下是我編寫的代碼,但它掛在read()
。
static void
process_command (int fd) {
fprintf (stderr, "process_command\n");
char *buffer = (char *) malloc (sizeof (char) * SIZE_TO_READ);
int n = 0;
while (1) {
fprintf (stderr, ".");
n = read (fd, buffer, SIZE_TO_READ);
fprintf (stderr, "bytes read = %d \n", n);
if (n <= 0 || n == -1)
break;
buffer = (char *) realloc (buffer, n + SIZE_TO_READ);
}
char * p = strchr (buffer, '\n');
if (p) *p = '\0';
fprintf (stderr, "-----> %s\n", buffer);
if (buffer) free (buffer);
}
FD在這種情況下是FILENO_STDIN
將`realloc()`的結果賦值給與其參數相同的變量是不安全的,因爲分配可能會失敗(在這種情況下,您將泄漏舊的緩衝區)。另外,你對`strchr()`的使用對我來說看起來並不安全。 – 2011-01-22 19:21:19
謝謝,我會修復這個問題 – Avinash 2011-01-22 19:22:11