socketpair的用法和理解

2021-07-25 11:09:04 字數 1667 閱讀 1693

socketpair()函式的宣告:

#include 

#include

int socketpair(int d, int type, int protocol, int sv[2]);

socketpair()函式用於建立一對無名的、相互連線的套接子。

如果函式成功,則返回0,建立好的套接字分別是sv[0]和sv[1];否則返回-1,錯誤碼儲存於errno中。

基本用法:

1. 這對套接字可以用於全雙工通訊,每乙個套接字既可以讀也可以寫。例如,可以往sv[0]中寫,從sv[1]中讀;或者從sv[1]中寫,從sv[0]中讀;

2. 如果往乙個套接字(如sv[0])中寫入後,再從該套接字讀時會阻塞,只能在另乙個套接字中(sv[1])上讀成功;

3. 讀、寫操作可以位於同乙個程序,也可以分別位於不同的程序,如父子程序。如果是父子程序時,一般會功能分離,乙個程序用來讀,乙個用來寫。因為檔案描述副sv[0]和sv[1]是程序共享的,所以讀的程序要關閉寫描述符, 反之,寫的程序關閉讀描述符。

舉例:

一、讀寫操作位於同一程序

#include 

#include

#include

#include

#include

#include

#include

#include

const

char* str = "socket pair test.";

int main(int argc, char* argv);

int socket_pair[2];

pid_t pid;

if(socketpair(af_unix, sock_stream, 0, socket_pair) == -1 )

int size = write(socket_pair[0], str, strlen(str));

//可以讀取成功;

read(socket_pair[1], buf, size);

printf("read result: %s\n",buf);

return exit_success;

}

二、讀寫操作位於不同程序

#include 

#include

#include

#include

#include

#include

#include

#include

const

char* str = "socket pair test.";

int main(int argc, char* argv);

int socket_pair[2];

pid_t pid;

if(socketpair(af_unix, sock_stream, 0, socket_pair) == -1 )

pid = fork();

if(pid < 0) else

if(pid > 0) else

if(pid == 0)

for(;;)

return exit_success;

}

socketpair的用法和理解

socketpair 標頭檔案 synopsis include see notes include int socketpair int domain,int type,int protocol,int sv 2 socketpair 函式用於建立一對無名的 相互連線的套接子。如果函式成功,則返回...

repo 的一些用法和理

repo的用法 zz wget 或者 curl bin repo 用repo sync 在抓去 android source code 的時候,會經常出現一些錯誤導致 repo sync 中斷,每次都要手動開始。可以用如下的命令,來自動重複 1 while ne 0 do repo sync don...

ContentProvider的用法與理解

contentprovider是用來分享資料的乙個標準介面,所以在使用上它分為3部分 中間部分就是乙個註冊,在manifest中加provider,由主機名和路徑組陳,表示全球唯一的乙個繼承了contentprovider並實現了抽象方法的類 contentprovider部分就是向外部提供資料的部...