Day33_信号量集、网络编程
来源:互联网 发布:云南广电网络网上缴费 编辑:程序博客网 时间:2024/06/15 00:50
今天:
信号量集
网络编程
信号量集 -XSI IPC的方式。但和共享内存、消息队列有很大的区别,信号量集 其实就是一个 信号量的数组。信号量(semaphore) 就是一个计数器。用于控制访问同一资源的 最大并行(同时运行)进程数。当信号量达到0 时,再有进程就会被阻塞,直到有其他进程释放信号量才能访问;
信号量的工作方式:先设成最大值,然后有进程访问就-1,结束访问就+1,当计数为0时,就阻塞或者返回错误(非阻塞方式);
IPC对应的是信号量集,而不是单个的信号量,即使只有一个信号量,也要做成长度为1的信号量集。
信号量集的编程步骤:
1 生成 key
2 创建/获取 信号量集的 内部ID
semget(key,数组长度,flags) 返回信号量集的ID;
3 如果是新建信号量集,需要设置每个信号量的初值;
semctl(semid,数组下标,SETVAL,初始值) 设置某个信号量的初始值
4 使用信号量集
5 如果不使用了,可以删除 semctl(RMID);
如何使用信号量集:
semop()函数
int semop(int semid,struct senbufsemoparray[],size_t nops);
参数 semoparray 是一个指针,它指向一个信号量操作数组,信号量操作由sembuf结构表示:
struct sembuf
{
unsigned short sem_num;//信号量的下标
short sem_op;//信号量操作方式。-1,0,1
short sem_flg;//信号量的操作标记,默认为0,也可以用IPC_NOWAIT表示非阻塞
}
网络编程:(非常重要)
网络常识 - IP地址、端口、网络协议、7层模型和4层/5层;
osi7层模型:
1. physical 物理层
2. Data link 数据链路层
3. Network 网络层
4. Transport 传输层
5. Swssion 会话层
6. Presentatio 表现层
7. Application 应用层
在协议中,有很多规范(数据交互),这些规范叫做协议;
http - 超文本传输协议(互联网基础协议)
ftp - 文件传输协议
邮件发送和接收协议 - smtp 和pop3
传输层协议:
TCP协议 - 传输控制协议;
UDP协议 - 用户数据报协议
网络协议 IP协议—— 网络中查找计算机
一对相关的协议组成一个协议簇(协议族)。TCP/IP就是一个协议簇;
IP地址:就是一个整数,最初时就是4字节的整数,是计算机在网络中唯一的标识。两种表示方式:十六进制描述法(8位的16进制) 针对计算机底层。
点分十进制:每个字节算一个数(0-255),中间用点隔开。人接触的IP都是点分十进制。
后来因为IP地址的分配不均,导致IP紧张,因此IP地址做了扩展,到了128位,因此IP地址有两种形式:IPV4 ——4字节 IPV6,主流还是IPV4;
192.168.15.100 -> 点分十进制
CO A8 OF 64 -> 0XCOA8OF64(十六进制)
其实对应IP地址是一个;
IP地址其实要和Mac地址绑定才能生效,Mac地址就是网卡的物理地址,就是网卡出场时预先设定的编号,这个编号确保唯一;
windows(dos):ipconfig
Unix:ifconfig /sbin/ifconfig
192.168.20.106
子网掩码:255.255.255.0
子网掩码:用于判断是否在同一个子网;
IP地址可以定位计算机,但数据传送时需要给计算机中特定的进程。端口 就是定位计算机中的进程,网络交互 必须有 IP地址和端口号。
端口就是一个short,值为0-65535。不是所有端口都可以使用。
0-1023 - 大部分都被系统占用,所以不需要用。
1024 - 48000 多 程序员使用的,其中某些程序被占用。
余下的端口 就是动态端口,系统随时可能用一下,不稳定。
网络编程 :
套接字编程 == socket编程
socket编程有两种通信方式:一对一 和 一对多的两种 本地通信和网络通信
1 socket() 函数,创建一个套接字符 socket,返回 socket描述符。
int socket(int domain,int type,int protocol)
参数:domain域,用于选择协议簇
PF_UNIX PF_LOCAL PF_FILE ——本地通信(IPC)
PF_INET ——网络通信
PF_INET6 —— 网络通信IPV6
PF换成AF 也一样。
type 用于选择通信类型
SOCK_STREAM :数据流,用于TCP
SOCK_DGRAM: 数据报,用于UDP
protocol 没有效果的参数,给0即可;
返回 socket描述符,用法和文件描述符差不多;失败返回-1;
2准备一个通信地址
通信地址有三个结构体,socketaddr不存储通信地址,只做参数的类型;通信地址存在另外两种结构中:
本地通信的地址 sockaddr_un
#include <sys/un.h>
struct sockaddr_un
{
int sun_family;//协议簇,与socket一致
char sun_path[];//socket文件的文件名,带路径
};
网络通信地址 sockaddr_in
#include <netinet/in.h>
struct sockaddr_in
{
int sin_family;//协议簇,与socket一致
short sin_port;//端口好
struct in_addr sin_addr;//IP地址
}
3.绑定,相当于服务器开放端口
bind(sockfd,sockaddr,length)
4.读写描述符的函数 read() write()
5 关闭 close()
客户端编程步骤与服务器端基本一致,除了第三步用connect()取代bind();
但是客户端准备通信地址 是服务器的。
信号量集
网络编程
信号量集 -XSI IPC的方式。但和共享内存、消息队列有很大的区别,信号量集 其实就是一个 信号量的数组。信号量(semaphore) 就是一个计数器。用于控制访问同一资源的 最大并行(同时运行)进程数。当信号量达到0 时,再有进程就会被阻塞,直到有其他进程释放信号量才能访问;
信号量的工作方式:先设成最大值,然后有进程访问就-1,结束访问就+1,当计数为0时,就阻塞或者返回错误(非阻塞方式);
IPC对应的是信号量集,而不是单个的信号量,即使只有一个信号量,也要做成长度为1的信号量集。
信号量集的编程步骤:
1 生成 key
2 创建/获取 信号量集的 内部ID
semget(key,数组长度,flags) 返回信号量集的ID;
3 如果是新建信号量集,需要设置每个信号量的初值;
semctl(semid,数组下标,SETVAL,初始值) 设置某个信号量的初始值
4 使用信号量集
5 如果不使用了,可以删除 semctl(RMID);
如何使用信号量集:
semop()函数
int semop(int semid,struct senbufsemoparray[],size_t nops);
参数 semoparray 是一个指针,它指向一个信号量操作数组,信号量操作由sembuf结构表示:
struct sembuf
{
unsigned short sem_num;//信号量的下标
short sem_op;//信号量操作方式。-1,0,1
short sem_flg;//信号量的操作标记,默认为0,也可以用IPC_NOWAIT表示非阻塞
}
网络编程:(非常重要)
网络常识 - IP地址、端口、网络协议、7层模型和4层/5层;
osi7层模型:
1. physical 物理层
2. Data link 数据链路层
3. Network 网络层
4. Transport 传输层
5. Swssion 会话层
6. Presentatio 表现层
7. Application 应用层
在协议中,有很多规范(数据交互),这些规范叫做协议;
http - 超文本传输协议(互联网基础协议)
ftp - 文件传输协议
邮件发送和接收协议 - smtp 和pop3
传输层协议:
TCP协议 - 传输控制协议;
UDP协议 - 用户数据报协议
网络协议 IP协议—— 网络中查找计算机
一对相关的协议组成一个协议簇(协议族)。TCP/IP就是一个协议簇;
IP地址:就是一个整数,最初时就是4字节的整数,是计算机在网络中唯一的标识。两种表示方式:十六进制描述法(8位的16进制) 针对计算机底层。
点分十进制:每个字节算一个数(0-255),中间用点隔开。人接触的IP都是点分十进制。
后来因为IP地址的分配不均,导致IP紧张,因此IP地址做了扩展,到了128位,因此IP地址有两种形式:IPV4 ——4字节 IPV6,主流还是IPV4;
192.168.15.100 -> 点分十进制
CO A8 OF 64 -> 0XCOA8OF64(十六进制)
其实对应IP地址是一个;
IP地址其实要和Mac地址绑定才能生效,Mac地址就是网卡的物理地址,就是网卡出场时预先设定的编号,这个编号确保唯一;
windows(dos):ipconfig
Unix:ifconfig /sbin/ifconfig
192.168.20.106
子网掩码:255.255.255.0
子网掩码:用于判断是否在同一个子网;
IP地址可以定位计算机,但数据传送时需要给计算机中特定的进程。端口 就是定位计算机中的进程,网络交互 必须有 IP地址和端口号。
端口就是一个short,值为0-65535。不是所有端口都可以使用。
0-1023 - 大部分都被系统占用,所以不需要用。
1024 - 48000 多 程序员使用的,其中某些程序被占用。
余下的端口 就是动态端口,系统随时可能用一下,不稳定。
网络编程 :
套接字编程 == socket编程
socket编程有两种通信方式:一对一 和 一对多的两种 本地通信和网络通信
1 socket() 函数,创建一个套接字符 socket,返回 socket描述符。
int socket(int domain,int type,int protocol)
参数:domain域,用于选择协议簇
PF_UNIX PF_LOCAL PF_FILE ——本地通信(IPC)
PF_INET ——网络通信
PF_INET6 —— 网络通信IPV6
PF换成AF 也一样。
type 用于选择通信类型
SOCK_STREAM :数据流,用于TCP
SOCK_DGRAM: 数据报,用于UDP
protocol 没有效果的参数,给0即可;
返回 socket描述符,用法和文件描述符差不多;失败返回-1;
2准备一个通信地址
通信地址有三个结构体,socketaddr不存储通信地址,只做参数的类型;通信地址存在另外两种结构中:
本地通信的地址 sockaddr_un
#include <sys/un.h>
struct sockaddr_un
{
int sun_family;//协议簇,与socket一致
char sun_path[];//socket文件的文件名,带路径
};
网络通信地址 sockaddr_in
#include <netinet/in.h>
struct sockaddr_in
{
int sin_family;//协议簇,与socket一致
short sin_port;//端口好
struct in_addr sin_addr;//IP地址
}
3.绑定,相当于服务器开放端口
bind(sockfd,sockaddr,length)
4.读写描述符的函数 read() write()
5 关闭 close()
客户端编程步骤与服务器端基本一致,除了第三步用connect()取代bind();
但是客户端准备通信地址 是服务器的。
- Day33_信号量集、网络编程
- UNIX网络编程:信号量semphore
- linux网络编程之System V信号量
- UNIX网络编程(十)Posix信号量
- 网络编程系列之三 信号量
- UNIX网络编程——Posix信号量
- UNIX网络编程:IPC之信号量
- linux网络编程之linux信号量学习
- linux网络编程中要注意信号量
- linux网络编程之System V 信号量(一):封装一个信号量集操作函数的工具
- linux网络编程之System V 信号量(一):封装一个信号量集操作函数的工具
- linux网络编程二十四:多进程编程之信号量
- 信号量编程
- 信号量编程
- 信号量编程
- UNIX网络编程卷二 笔记 Posix信号量
- linux网络编程之POSIX信号量、自旋锁、读写锁
- 《UNIX网络编程 卷2》 笔记: Posix信号量
- Listener的使用(监听用户请求,ServletRequest范围内属性的变化)
- Day31_管道,共享内存,消息队列
- (Relax ST1.3)POJ 1045 Bode Plot
- Day32_简易版ATM
- 启动bochs时报错No bootable device
- Day33_信号量集、网络编程
- Day34_TCP、UDP网络编程
- java学习之路----IO---学习工作经历,乱码的产生
- JBoss 系列五十六:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - I(基本理论)
- 跳转表实例(二)
- linux下tcp,udp,icmp小例子
- Day35_多线程
- AsyncTask的参数介绍
- LCIS