套接口生产传统本地地址和抽象本地地址

本文通过两个C语言程序示例介绍了Unix域套接字的使用方法,包括普通本地地址和抽象本地地址的创建与绑定过程,并展示了如何利用netstat命令查看套接字的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<time.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<sys/stat.h>
#include<sys/un.h>
static void bail(char* on_what){
 perror(on_what);
 exit(1);
}
int main(int argc,char**argv){
 int z;
 int sck_unix;
 struct sockaddr_un adr_unix;
 int len_unix;
 const char path_unix[]="/tmp/my_sock";

 sck_unix=socket(AF_UNIX,SOCK_STREAM,0); 
 if(sck_unix==-1) bail("create");
 unlink(path_unix);
 memset(&adr_unix,0,sizeof(adr_unix));
 adr_unix.sun_family=AF_UNIX;
 strncpy(adr_unix.sun_path,path_unix,sizeof(adr_unix.sun_path)-1)[sizeof(adr_unix.sun_path)-1]=0;
 len_unix=SUN_LEN(&adr_unix);
 z=bind(sck_unix,(struct sockaddr*)&adr_unix,len_unix);
 if(z==-1) bail("bind()");
 system("netstat -pa --unix");
      //"sed -n '/^Active UNIX/,/^Proto/p'");
 close(sck_unix);
 unlink(path_unix);
 
 return 0;
}


运行结果:

unix  2      [ ]         STREAM                   29132  3773/a.out          /tmp/my_sock


可以看到是用一个本地地址生成的套接口

缺陷是总有一个本地文件系统对象的生成。下面为抽象本地地址的生成

代码:

int main(int argc,char**argv){
 int z;
 int sck_unix;
 struct sockaddr_un adr_unix;
 int len_unix;
 const char path_unix[]="Z*my_socket";

 sck_unix=socket(AF_UNIX,SOCK_STREAM,0); 
 if(sck_unix==-1) bail("create");
 unlink(path_unix);
 memset(&adr_unix,0,sizeof(adr_unix));
 adr_unix.sun_family=AF_UNIX;
 strncpy(adr_unix.sun_path,path_unix,sizeof(adr_unix.sun_path)-1)[sizeof(adr_unix.sun_path)-1]=0;
 len_unix=SUN_LEN(&adr_unix);
 adr_unix.sun_path[0]=0;
 z=bind(sck_unix,(struct sockaddr*)&adr_unix,len_unix);
 if(z==-1) bail("bind()");
 system("netstat -pa --unix");
      //"sed -n '/^Active UNIX/,/^Proto/p'");
 close(sck_unix);
 unlink(path_unix);
 
 return 0;
}


 

结果:

 

unix  2      [ ]         STREAM                   29664  3803/a.out          @*my_socket


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值