Linux 高階I O函式 dup函式

2021-10-19 07:12:37 字數 1222 閱讀 1032

//

// created by wenfan on 2021/2/6.

//#include #include #include #include #include #include #include #include #include int main(int argc, char *ar**)

const char *ip = ar**[1];

int port = atoi(ar**[2]);

struct sockaddr_in address;

bzero(&address, sizeof(address));

address.sin_family = af_inet;

address.sin_port = htons(port);

address.sin_addr.s_addr = inet_addr(ip);

int sock = socket(pf_inet, sock_stream, 0);

assert(sock >= 0);

int ret = bind(sock, (struct sockaddr *) &address, sizeof(address));

assert(ret != -1);

struct sockaddr_in client;

socklen_t client_addrlength = sizeof(client);

ret = listen(sock, 5);

assert(ret != -1);

int confd = accept(sock, (struct sockaddr *) &client, &client_addrlength);

if (confd < 0)

printf("errno is : %d\n", errno);

else

close(confd);

}close(sock);

return 0;

}

上述**中,我們先關閉標準輸出檔案描述符stdout_fileno(其值是1),然後複製socket檔案描述符connfd。因為dup總是返回系統最小的可用檔案描述符,所以他的返回值是1,即之前關閉的標準輸出檔案描述符的值。這樣一來,伺服器輸出到標準輸出的內容就會直接傳送到客戶端連線對應的socket上(cond),此printf呼叫的輸出將被客戶端獲得。

Linux中dup函式和dup2函式

個人部落格傳送門 linux 中進行檔案描述符的重定向可以使用兩個函式 dup函式和dup2函式,其中還有乙個dup3函式,但是這個是linux後面版本新增的,不是所有的linux核心都支援,在這裡不討論。在linux系統中約定檔案描述符 0 1 2 對應標準輸入 標準輸出 標準錯誤,預設開啟。du...

高階I O函式

套接字i o操作上設定超時的方法有以下3種 1.呼叫alarm,在指定超時期滿時產生sigalrm訊號。2.在select種阻塞等待i o,一次代替直接阻塞在read或write呼叫上。3.使用較新的so rcvtimeo和so sndtimeo套接字選項。以由呼叫者指定的超時上限呼叫connect...

高階I O函式

include intpipe int fd 2 要想實現雙向的資料傳輸,應該使用兩個管道。管道內部傳輸的資料時位元組流,這和tcp位元組流的概念相同。但tcp寫入多少位元組的資料決定對方的接受視窗和擁塞視窗,而管道本身有乙個容量限制,預設是65536位元組。我們可以使用fcntl函式來修改管道容量...