/*********************程序相关信息*********************
* 程序编号:015
* 程序编写起始日期:2013.11.30
* 程序编写完成日期:2013.11.30
* 程序修改日期: 修改备注:
* 程序目的:学习UNIX域套接字
* 所用主要函数:socket() bind() accept() listen()
* 程序说明: 同一台机器不同进程间通信。
* 程序完成地点:
* *********************程序相关信息*********************/ #define UNIX_PATH_MAX 108 #include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h> #include <stdio.h> #define BUFSIZE 32 int main(void)
{
int sd, newsd;
char buf[BUFSIZE];
struct sockaddr_un myend,*p;
int ret; sd = socket(PF_LOCAL, SOCK_STREAM, 0);
if (sd == -1) {
perror("socket()");
goto socket_err;
}
// #define UNIX_PATH_MAX 108
//
// struct sockaddr_un {
// sa_family_t sun_family; /* AF_UNIX */
// char sun_path[UNIX_PATH_MAX]; /* pathname*/
// };
//
myend.sun_family = AF_UNIX;
//int snprintf(char *str, size_t size, const char *format);
snprintf(myend.sun_path, UNIX_PATH_MAX, "rcv_sock");
// fprintf("rcv_sock","%s",myend.sun_path); //wrong unlink(myend.sun_path);
// Call the unlink function to remove the specified FILE
ret = bind(sd, (struct sockaddr *)&myend, sizeof(myend));
if (ret == -1) {
perror("bind()");
goto bind_err;
}
//调用 listen 使其能够自动接收到来的连接并且为连接队列指定一个长度限制
listen(sd, 20); newsd = accept(sd, NULL, 0);
if (newsd == -1) {
perror("accept()");
goto accept_err;
} while (1) {
ret = read(newsd, buf, BUFSIZE);
/* if error */
if (ret == 0) {
break;
} write(1, buf, ret);
write(newsd, "xxxxx\n", 6);
} close(newsd);
close(sd); return 0; close(newsd);
accept_err:
bind_err:
close(sd);
socket_err:
return 1;
}
 
/*********************程序相关信息*********************
* 程序编号:015
* 程序编写起始日期:2013.11.30
* 程序编写完成日期:2013.11.30
* 程序修改日期: 修改备注:
* 程序目的:学习unix
* 所用主要函数:pipe(),read(),fork()
* 程序说明:在本机上运行时,可以把程序中的“./test.c”修改成自己机器上的某个文件(要带路径)
* 程序完成地点:
* *********************程序相关信息*********************/ #define UNIX_PATH_MAX 108 #include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h> #include <stdio.h> #define BUFSIZE 32 int main(void)
{
int sd;
char buf[BUFSIZE];
struct sockaddr_un hisend;
int ret; sd = socket(PF_LOCAL, SOCK_STREAM, 0);
if (sd == -1) {
perror("socket()");
goto socket_err;
} hisend.sun_family = AF_UNIX;
snprintf(hisend.sun_path, UNIX_PATH_MAX, "rcv_sock"); ret = connect(sd, (struct sockaddr *)&hisend, sizeof(hisend));
if (ret == -1) {
perror("connect()");
goto connect_err;
} while (1) {
ret = read(0, buf, BUFSIZE);
/* if error */
if (ret == 0) {
break;
} write(sd, buf, ret);
ret = read(sd, buf, BUFSIZE);
write(1, buf, ret);
} close(sd); return 0; accept_err:
connect_err:
close(sd);
socket_err:
return 1;
}

UNIX 域套接字——UNIX domain socket的更多相关文章

  1. UNIX域套接字——UNIX domain socket(DGRAM)

    #define UNIX_PATH_MAX 108 #include <sys/types.h> #include <sys/socket.h> #include <sy ...

  2. Unix域套接字(Unix Domain Socket)介绍【转】

    本文转载自:http://blog.csdn.net/roland_sun/article/details/50266565 版权声明:本文为博主原创文章,未经博主允许不得转载. 在Linux系统中, ...

  3. 《网络编程》Unix 域套接字

    概述 Unix 域套接字是一种client和server在单主机上的 IPC 方法.Unix 域套接字不运行协议处理,不须要加入或删除网络报头,无需验证和,不产生顺序号,无需发送确认报文,比因特网域套 ...

  4. Unix域套接字简介

    在Linux系统中,有很多进程间通信方式,套接字(Socket)就是其中的一种.但传统的套接字的用法都是基于TCP/IP协议栈的,需要指定IP地址.如果不同主机上的两个进程进行通信,当然这样做没什么问 ...

  5. UNIX域套接字(unix domain)

    UNIX域套接字用于在同一台机器上运行的进程之间的通信. UNIX域套接字提供流和数据报两种接口. 说明:UNIX域套接字比因特网套接字效率更高.它仅赋值数据:不进行协议处理,如添加或删除网络报头.计 ...

  6. 高级进程间通信之UNIX域套接字

    UNIX域套接字用于在同一台机器上运行的进程之间的通信.虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高.UNIX域套接字仅仅复制数据:它们并不执行协议处理,不需要添加或删除网络报头,无 ...

  7. UNIX网络编程——UNIX域套接字编程和socketpair 函数

    一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络soc ...

  8. UNIX域套接字编程和socketpair 函数

    一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络soc ...

  9. unix进程间通信方式(下)-unix域套接字(转)

    在之前的博客中已经总结了其它7种进程间的通信方式.unix域套接字用于在同一台计算机上的进程间通信,虽然因特网域套接字可用于同一目的,但是unix域套接字的效率更高.unix域套接字并不进行协议处理, ...

随机推荐

  1. 那些年我们爬过的山 - mybatis批量导入

    [原创作品,转载请注明出处] 写这篇文章之前想着给这篇博客起一个文艺一点的标题,思来想去,想到了那些年我们爬过的山,或者我们一起趟过的河?代码不规范,同事两行泪,这是多么痛的领悟啊! 背景 本组一名实 ...

  2. hdu-4027线段树练习

    title: hdu-4027线段树练习 date: 2018-10-10 18:07:11 tags: acm 算法 刷题 categories: ACM-线段树 # 概述 这道线段树的题可以说是我 ...

  3. 洛谷——P2756 飞行员配对方案问题

    P2756 飞行员配对方案问题 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其 ...

  4. Kubernetes网络模型概念

    Kubernetes网络模型 Kubernetes网络模型设计的一个基础原则是:每个Pod都拥有一个独立的IP地址,而且假定所有Pod都在一个可以直接连通的.扁平的网络空间中.所以不管它们是否运行在同 ...

  5. 解决python2.x文件读写编码问题

    转自: https://xrlin.github.io/%E8%A7%A3%E5%86%B3python2.x%E6%96%87%E4%BB%B6%E8%AF%BB%E5%86%99%E7%BC%96 ...

  6. [ 转载 ] Java开发中的23种设计模式详解(转)

    Java开发中的23种设计模式详解(转)   设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...

  7. jQuery学习总结2

    六.动画效果 6.1.基本 hide([speed,[fn]])隐藏显示的元素 speed: 三种预定速度之一的字符串("slow","normal", or ...

  8. 【BZOJ】2760: [JLOI2011]小A的烦恼【字符串模拟】

    2760: [JLOI2011]小A的烦恼 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 406  Solved: 258[Submit][Statu ...

  9. 【BZOJ-3110】K大数查询 整体二分 + 线段树

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6265  Solved: 2060[Submit][Sta ...

  10. Codeforces Round #313 (Div. 1) C. Gerald and Giant Chess DP

    C. Gerald and Giant Chess Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...