Linux网络编程基本知识

来源:互联网 发布:科比15-16所有比赛数据 编辑:程序博客网 时间:2024/04/24 05:54
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