您的位置:首页 > 其它

day12

2015-07-30 14:39 218 查看
今天的内容:

(1)IPC-使用信号量集进行通行

(2)网络编程 -网络常识,本地通信,网络通信

1.信号量集

1.1概念

(1)什么叫信号量?

信号量就是一个计数器,用于控制同时访问资源的进程数,解决有限资源的分配问题。

(2)什么叫信号量集

信号量集 信号量的集合,也就是由多个信号量组成的数组,可以同时控制多种资源的分配问题

1.2 计数器的工作方式

(1)先对计数器进行初始化为最大值

(2)有进程申请资源,计数减1

(3)计数器的值为0时,终止进程对资源的申请,申请资源的进程就会阻塞

(4)有进程释放资源,计数加1

(5)如果计数器的值大于0,阻塞的进程就可以拿到共享资源,直到计数为0时,其他进程继续阻塞

1.3使用信号量集进行通信的步骤

(1)获取key值,使用赋值或者使用ftok函数生成

(2)创建/获取信号量集,使用semget函数

(3)初始化信号量集,给指定的信号量进行初始化,使用semctl函数

(4)操作信号量集,对指定信号量集进行 加/减 操作,使用semop函数

(5)如果不再使用信号量集,那么可以删除信号量集,使用semctl函数

1.4函数的解析

(1)semget函数

#include<sys/ipc.h>

#include<sys/sem.h>

int semget(key_t key,int nsems,int semflg);

第一个参数:具体的key值,可以通过ftok函数获取

第二个参数:信号量集的大小,也就是信号量的个数

第三个参数:信号量集的操作方式

IPC_CREAT -不存在则创建,以存在则获取

IPC_EXCL -如果存在则创建失败

0 -获取信号量集,不存在则获取失败

返回值:成功返回信号量集的id ,失败返回-1

函数的功能:创建/获取信号量集

注意:

当创建一个信号量集时,需要在第三个参数中指定信号量集的权限

(2)semctl函数

#include<sys/ipc.h>

#include<sys/sem.h>

int semctl(int semid,int semnum,int cmd,……);

第一个参数:表示信号量集的id

第二个参数:表示信号量集的下标

第三个参数:具体的操作

SETVAL -给信号量集中的第semnum个信号量设置值,设置的具体值由arg.val决定

IPC_STAT -将semid指定的信号量集信息拷贝到arg.buf中

IPC_SET -根据arg.buf中的内容设置给semid指定的信号量集

IPC_RMID -删除信号量集

第四个参数:

union semun {

int val; /* Value for SETVAL */

struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */

unsigned short *array; /* Array for GETALL, SETALL */

struct seminfo *__buf; /* Buffer for IPC_INFO

(Linux-specific) */

};

struct semid_ds {

struct ipc_perm sem_perm; /* 拥有者和权限 */

time_t sem_otime; /* 最后一次使用semop时间 */

time_t sem_ctime; /* 最后一次改变的时间 */

unsigned short sem_nsems; /* 信号量的个数 */

};

struct ipc_perm {

key_t __key; /* Key supplied to semget(2)*/

uid_t uid; /* Effective UID of owner */

gid_t gid; /* Effective GID of owner */

uid_t cuid; /* Effective UID of creator */
gid_t cgid; /* Effective GID of creator */

unsigned short mode; /* Permissions */

unsigned short __seq; /* Sequence number */

};

返回值:成功返回值根据cmd的不同而不同,失败返回-1

(3)semop函数

#include<sys/ipc.h>

#include<sys/sem.h>

int semop(int semid,struct sembuf* sops,unsigned nsops/*信号量集的大小*/);

第一个参数:信号量集的id

第二个参数:结构体指针

unsigned short sem_num; /* 信号量集的下标 */

short sem_op; /* 具体的操作,整数增,负数减 */

short sem_flg; /*默认给0表示阻塞,IPC_NOWAIT表示不阻塞 */

第三个参数:信号量集的大小

返回值;成功返回0,失败返回-1.

函数功能:

针对semid所指向的信号量集中的nsops个信号量进行具体的操作。

2.网络编程

2.1网络常识

流行的网络通信软件有:QQ 微信 YY 飞信 阿里旺旺……

(1)网络的7层协议

ISO按照逻辑划分出来7层网络协议:

应用层:和应用程序打交道,进行数据的交互

表示层:将应用程序中的数据按照规则封装起来

会话层:聊天对话的意思,控制会话的开始和结束等等

传输层:用于数据交换的通道

网络层:通过具体的网络传输数据

数据链路层:对具体的信息进行编码转换

物理层:路由器和交换机等

(2)常见的协议

TCP 传输控制协议,面向链接的协议(打电话)

UDP 用户数据报协议,非面向无连接的协议(类似于发短信)

IP 互联网协议,信息传递机制

IPX

(3)IP地址

IP 地址 - 是inyernet中唯一的地址标识,一般都是一个32位的整数(IPV4),也有128位整数(IPV6)

将IP地址中的每哟个字节转换成十进制,采用.隔开,这种IP地址的表示方法叫做:点分十进制表示法。

IP地址分为网络号和主机号,将IP地址分成以下四类

A类:0+7位网络地址 +24位本地地址

B类:10+14位网络地址 + 16位本地地址

C类:110+ 21位网络地址+8位本地地址

D类:1110+ 28位多播地址

(ifconfig可以查看物理地址)

子网掩码是采用点分十进制表示法进行表示,主要用于指定一个IP地址中哪些位表示网络地址,以及哪些位表示主机地址,不能单独使用,必须和IP地址搭配使用

如:

IP地址:192.168.182.48

子网掩码:255.255.255.0

________________________________________

192.168.182 网络地址

其中的48表示主机号

可以判断两个不同的IP地址是否在同一个子网中

MAC地址也就是物理地址,也就是网卡的地址,可以通过绑定MAC地址来限制上网的设备。

(4)端口号

IP地址可以定位具体的主机,端口号可以用于定位具体的某个进程。

端口号是unsigned short类型,范围:0~65535

其中0~1024的端口号一帮被系统占用,比如:HTTP:80 FTP:21

如:

ox12345678

按照内存地址从低到高依次存放:

ox12 ox34 ox56 ox78

低位内存地址存放高位数据:大端系统

低位内存地址存放低位数据:小端系统

字节序主要有两种:网络字节序和主机字节序

主机字节序一般表示当前主机的字节顺序

网络字节序一般表示不同主机之间的统一字节序

明日预报:

(1)网络编程的各种模型

(2)多线程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: