Linux网络编程基本知识
--from 《实战Linux Socket 编程》
1.套接口
#include<unistd.h>
int pipe(filedes[2]);
其中filedes[0]表示读出端,而filedes[1]表示写入端;这两个方向不能颠倒。
2.管道
#include<sys/types.h>
#include<sys/socket.h>
int socketpair(int domain,int type,int protocol,int sv[2]);
参数说明:
domain:套接口的域名
type:套接口的类型,一般为SOCK_STREAM 或者SOCK_DGRAM
protocol:套接口使用的协议,对于socketpair函数,该参数必须为0
sv[2]:指向接收用于引用套接口文件描述符数组的指针,每个数值代表一个套接口,类似管道
成功返回0,否则返回-1,可以通过errno来判断出错原因。
实例程序sock1-1.c如下:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
int main(int argc, char * argv[])
{
int z; /*返回的状态*/
int s[2]; /*套接口对*/
/* 生成本地套接口对*/
z=socketpair(AF_LOCAL,SOCK_STREAM,0,s);
if(z==-1)
{
fprintf(stderr,"%s:socketpair(AF_LOCAL,SOCK_STREAM,0)/n",strerror(errno));
return 1;
}
/*报告所返回的套接口文件描述符*/
printf("s[0]=%d;/n",s[0]);
printf("s[1]=%d;/n",s[1]);
system("netstat --unix -p");
return 0;
}
编译,运行:
Suse:~/Desktop/program/net # gcc sock1-1.c -o sock1-1
Suse:~/Desktop/program/net # ./sock1-1
s[0]=3;
s[1]=4;
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 16 [ ] DGRAM 6218 2585/syslog-ng /dev/log
unix 2 [ ] DGRAM 2406 981/udevd @/org/kernel/udev/udevd
unix 2 [ ] DGRAM 6392 2683/hald @/org/freedesktop/hal/udev_event
unix 2 [ ] DGRAM 6393 2683/hald @/var/run/hal/hotplug_socket2
unix 3 [ ] STREAM CONNECTED 20093 4892/sock1-1
unix 3 [ ] STREAM CONNECTED 20092 4892/sock1-1
unix 3 [ ] STREAM CONNECTED 19306 3848/scim-panel-gtk /tmp/scim-panel-socket:0-root
unix 3 [ ] STREAM CONNECTED 19305 4804/gedit
unix 3 [ ] STREAM CONNECTED 19304 3843/scim-launcher /tmp/scim-socket-frontend-root
unix 3 [ ] STREAM CONNECTED 19303 4804/gedit
unix 3 [ ] STREAM CONNECTED 19302 3843/scim-launcher /tmp/scim-socket-frontend-root
unix 3 [ ] STREAM CONNECTED 19301 4804/gedit
unix 3 [ ] STREAM CONNECTED 19291 3886/esd /tmp/.esd/socket
unix 3 [ ] STREAM CONNECTED 19290 4804/gedit
unix 3 [ ] STREAM CONNECTED 19286 4804/gedit /tmp/orbit-root/linc-12c4-0-478fd1383988b
unix 3 [ ] STREAM CONNECTED 19285 3882/bonobo-activat
unix 3 [ ] STREAM CONNECTED 19284 3882/bonobo-activat /tmp/orbit-root/linc-f2a-0-405374fbea5bf
unix 3 [ ] STREAM CONNECTED 19283 4804/gedit
unix 3 [ ] STREAM CONNECTED 19282 4804/gedit /tmp/orbit-root/linc-12c4-0-478fd1383988b
unix 3 [ ] STREAM CONNECTED 19281 3875/gconfd-2
unix 3 [ ] STREAM CONNECTED 19278 3875/gconfd-2 /tmp/orbit-root/linc-f23-0-2710ecc2419b
unix 3 [ ] STREAM CONNECTED 19277 4804/gedit
unix 3 [ ] STREAM CONNECTED 19275 3813/gnome-session /tmp/.ICE-unix/3813
unix 3 [ ] STREAM CONNECTED 19274 4804/gedit
unix 3 [ ] STREAM CONNECTED 19270 3560/X /tmp/.X11-unix/X0
unix 3 [ ] STREAM CONNECTED 19269 4804/gedit
unix 3 [ ] STREAM CONNECTED 18844 2683/hald @/tmp/hald-local/dbus-AmXE8ch7iI
unix 3 [ ] STREAM CONNECTED 18840 4724/hald-addon-sto
--from 《实战Linux Socket 编程》
1.套接口
#include<unistd.h>
int pipe(filedes[2]);
其中filedes[0]表示读出端,而filedes[1]表示写入端;这两个方向不能颠倒。
2.管道
#include<sys/types.h>
#include<sys/socket.h>
int socketpair(int domain,int type,int protocol,int sv[2]);
参数说明:
domain:套接口的域名
type:套接口的类型,一般为SOCK_STREAM 或者SOCK_DGRAM
protocol:套接口使用的协议,对于socketpair函数,该参数必须为0
sv[2]:指向接收用于引用套接口文件描述符数组的指针,每个数值代表一个套接口,类似管道
成功返回0,否则返回-1,可以通过errno来判断出错原因。
实例程序sock1-1.c如下:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
int main(int argc, char * argv[])
{
int z; /*返回的状态*/
int s[2]; /*套接口对*/
/* 生成本地套接口对*/
z=socketpair(AF_LOCAL,SOCK_STREAM,0,s);
if(z==-1)
{
fprintf(stderr,"%s:socketpair(AF_LOCAL,SOCK_STREAM,0)/n",strerror(errno));
return 1;
}
/*报告所返回的套接口文件描述符*/
printf("s[0]=%d;/n",s[0]);
printf("s[1]=%d;/n",s[1]);
system("netstat --unix -p");
return 0;
}
编译,运行:
Suse:~/Desktop/program/net # gcc sock1-1.c -o sock1-1
Suse:~/Desktop/program/net # ./sock1-1
s[0]=3;
s[1]=4;
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 16 [ ] DGRAM 6218 2585/syslog-ng /dev/log
unix 2 [ ] DGRAM 2406 981/udevd @/org/kernel/udev/udevd
unix 2 [ ] DGRAM 6392 2683/hald @/org/freedesktop/hal/udev_event
unix 2 [ ] DGRAM 6393 2683/hald @/var/run/hal/hotplug_socket2
unix 3 [ ] STREAM CONNECTED 20093 4892/sock1-1
unix 3 [ ] STREAM CONNECTED 20092 4892/sock1-1
unix 3 [ ] STREAM CONNECTED 19306 3848/scim-panel-gtk /tmp/scim-panel-socket:0-root
unix 3 [ ] STREAM CONNECTED 19305 4804/gedit
unix 3 [ ] STREAM CONNECTED 19304 3843/scim-launcher /tmp/scim-socket-frontend-root
unix 3 [ ] STREAM CONNECTED 19303 4804/gedit
unix 3 [ ] STREAM CONNECTED 19302 3843/scim-launcher /tmp/scim-socket-frontend-root
unix 3 [ ] STREAM CONNECTED 19301 4804/gedit
unix 3 [ ] STREAM CONNECTED 19291 3886/esd /tmp/.esd/socket
unix 3 [ ] STREAM CONNECTED 19290 4804/gedit
unix 3 [ ] STREAM CONNECTED 19286 4804/gedit /tmp/orbit-root/linc-12c4-0-478fd1383988b
unix 3 [ ] STREAM CONNECTED 19285 3882/bonobo-activat
unix 3 [ ] STREAM CONNECTED 19284 3882/bonobo-activat /tmp/orbit-root/linc-f2a-0-405374fbea5bf
unix 3 [ ] STREAM CONNECTED 19283 4804/gedit
unix 3 [ ] STREAM CONNECTED 19282 4804/gedit /tmp/orbit-root/linc-12c4-0-478fd1383988b
unix 3 [ ] STREAM CONNECTED 19281 3875/gconfd-2
unix 3 [ ] STREAM CONNECTED 19278 3875/gconfd-2 /tmp/orbit-root/linc-f23-0-2710ecc2419b
unix 3 [ ] STREAM CONNECTED 19277 4804/gedit
unix 3 [ ] STREAM CONNECTED 19275 3813/gnome-session /tmp/.ICE-unix/3813
unix 3 [ ] STREAM CONNECTED 19274 4804/gedit
unix 3 [ ] STREAM CONNECTED 19270 3560/X /tmp/.X11-unix/X0
unix 3 [ ] STREAM CONNECTED 19269 4804/gedit
unix 3 [ ] STREAM CONNECTED 18844 2683/hald @/tmp/hald-local/dbus-AmXE8ch7iI
unix 3 [ ] STREAM CONNECTED 18840 4724/hald-addon-sto