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部分就是向外部提供資料的部...