进程通信总结

进程间通信

<1>管道:管道是单向的,先进先出的,
	他把一个进程的输出和一个进程的输入连接在一起 
	一个进程在管道的尾部写数据,一个进程在管道的头部读数据

	无名管道:父子进程的通信
			半双工,有固定的读端和写端
			int pipe(int fd[2])
				fd[0]读 fd[1]写 
				用pipe函数创建
				
		使用步骤
			1 创建一个管道
			写:先关闭读端 close(fd[0])
				然后写 write(fd[1],"hello",5)
				关闭写端 close(fd[1])
			读:先关闭写端 close(fd[1])
				然后读 read(fd[0],buf,5)
				关闭读端 close(fd[0])			
				

	有名管道:任意进程的通信	
		使用步骤
				define FIFO "/tmp/myfifo"
			1 使用mkfifo(FIFO,...)函数创建一个有名管道
			2 使用fd =open(FIFO,...)打开这个管道
			3 使用write(fd,buf,100)
			4 使用read(fd,buf,100)
			5 close(fd)
		注意 : 管道只能创建一次 当一个进程执行mkfifo函数是,另一个就只需open就好
<2>信号Signal:
	信号是一种进程间通信机制,他给应用程序提供一种异步的软件中断,使应用程序有机会接收其他程序或终端发送的命令
	接收到信令后有三种处理方式 忽略SIG_IGN ,默认SIG_DFT , 捕捉(调用相对应的中断服务函数)
	pause

<3>共享内存:
	使用步骤
		1 首先使用shmget函数创建一块共享内存
		2 用shmat函数映射这块共享内存
		
	在使用完后用shmdt函数解除地址的映射
	最后用shmctl函数删除共享内存

<4>消息队列:
	使用步骤
	1 首先使用ftok函数创建一个建值
	2 使用msgget函数创建一与上面键值相对应的消息队列描述字
	可以使用msgsnd函数发一条消息,这个函数可以通过指针写入
		相应的type值(消息类型)
	可以使用msgrcv函数从消息队列里获取消息
		(在成功读取这条消息后,这条消息将从管道移除)
	
<5>信号量
	主要作用 保护临界资源
	使用步骤
		1 创建一个信号量:  通过semget函数创建一个信号灯集
		2 初始化semval 	: 	通过semctl函数使用SETCAL命令初始化这个值
		3 获取与释放semval:通过semget函数创建一个信号灯集 semop函数获取(减一)或释放(加一)
		4 删除信号灯集 :	使用semctl函数通过IPC_RMID命令来删除它
<6>socket

你可能感兴趣的:(进程通信总结)