当前位置: 首页 > news >正文

泰安市违法建设网站厦门建设与管理局官网

泰安市违法建设网站,厦门建设与管理局官网,西安免费做网站多少钱,网站301重定向 注意事项进程间通信 #xff08;IPC#xff09; 方法总结#xff08;三#xff09; 信号量#xff08;SEMAPHORE#xff09; 信号量是一个计数器#xff0c;用于多进程对共享数据的访问#xff0c;信号量的意图在于进程间同步。 为了获得共享资源#xff0c;进程需要执行下列操… 进程间通信 IPC 方法总结三 信号量SEMAPHORE 信号量是一个计数器用于多进程对共享数据的访问信号量的意图在于进程间同步。 为了获得共享资源进程需要执行下列操作 创建一个信号量这要求调用者指定初始值对于二值信号量来说它通常是1也可是0。等待一个信号量该操作会测试这个信号量的值如果小于0就阻塞。也称为P操作。挂出一个信号量该操作将信号量的值加1也称为V操作。为了正确地实现信号量信号量值的测试及减1操作应当是原子操作。为此信号量通常是在内核中实现的。Linux环境中有三种类型Posix可移植性操作系统接口有名信号量使用Posix IPC名字标识、Posix基于内存的信号量存放在共享内存区中、System V信号量在内核中维护。这三种信号量都可用于进程间或线程间的同步。 Posix有名信号量 Posix基于内存的信号量 System V信号量 信号量与普通整型变量的区别 信号量是非负整型变量除了初始化之外它只能通过两个标准原子操作wait(semap) , signal(semap) ; 来进行访问操作也被成为PV原语P来源于荷兰语proberen测试V来源于荷兰语verhogen增加P表示通过的意思V表示释放的意思而普通整型变量则可以在任何语句块中被访问 信号量与互斥量之间的区别互斥量用于线程的互斥信号量用于线程的同步。这是互斥量和信号量的根本区别也就是互斥和同步之间的区别。 互斥是指某一资源同时只允许一个访问者对其进行访问具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序即访问是无序的。 同步是指在互斥的基础上大多数情况通过其它机制实现访问者对资源的有序访问。 在大多数情况下同步已经实现了互斥特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源互斥量值只能为0/1信号量值可以为非负整数。 也就是说一个互斥量只能用于一个资源的互斥访问它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是也可以完成一个资源的互斥访问。互斥量的加锁和解锁必须由同一线程分别对应使用信号量可以由一个线程释放另一个线程得到。套接字SOCKET 套接字是一种通信机制凭借这种机制客户/服务器即要进行通信的进程系统的开发工作既可以在本地单机上进行也可以跨网络进行。也就是说它可以让不在同一台计算机但通过网络连接计算机上的进程进行通信。 套接字是支持TCP/IP的网络通信的基本操作单元可以看做是不同主机之间的进程进行双向通信的端点简单的说就是通信的两方的一种约定用套接字中的相关函数来完成通信过程。 套接字特性 套接字的特性由3个属性确定它们分别是域、端口号、协议类型。 套接字的域 它指定套接字通信中使用的网络介质最常见的套接字域有两种 AF_INET它指的是Internet网络。当客户使用套接字进行跨网络的连接时它就需要用到服务器计算机的IP地址和端口来指定一台联网机器上的某个特定服务所以在使用socket作为通信的终点服务器应用程序必须在开始通信之前绑定一个端口服务器在指定的端口等待客户的连接。AF_UNIX表示UNIX文件系统它就是文件输入/输出而它的地址就是文件名。 套接字的端口号 每一个基于TCP/IP网络通讯的程序(进程)都被赋予了唯一的端口和端口号端口是一个信息缓冲区用于保留Socket中的输入/输出信息端口号是一个16位无符号整数范围是0-65535以区别主机上的每一个程序端口号就像房屋中的房间号低于256的端口号保留给标准应用程序比如pop3的端口号就是110每一个套接字都组合进了IP地址、端口这样形成的整体就可以区别每一个套接字。 套接字协议类型流套接字 流套接字在域中通过TCP/IP连接实现同时也是AF_UNIX中常用的套接字类型。流套接字提供的是一个有序、可靠、双向字节流的连接因此发送的数据可以确保不会丢失、重复或乱序到达而且它还有一定的出错后重新发送的机制。数据报套接字 它不需要建立连接和维持一个连接它们在域中通常是通过UDP/IP协议实现的。它对可以发送的数据的长度有限制数据报作为一个单独的网络消息被传输,它可能会丢失、复制或错乱到达UDP不是一个可靠的协议但是它的速度比较高因为它并一需要总是要建立和维持一个连接。原始套接字 原始套接字允许对较低层次的协议直接访问比如IP、 ICMP协议它常用于检验新的协议实现或者访问现有服务中配置的新设备因为RAW SOCKET可以自如地控制Windows下的多种协议能够对网络底层的传输机制进行控制所以可以应用原始套接字来操纵网络层和传输层应用。比如我们可以通过RAW SOCKET来接收发向本机的ICMP、IGMP协议包或者接收TCP/IP栈不能够处理的IP包也可以用来发送一些自定包头或自定协议的IP包。网络监听技术很大程度上依赖于SOCKET_RAW。 原始套接字与标准套接字的区别 原始套接字可以读写内核没有处理的IP数据包而流套接字只能读取TCP协议的数据数据报套接字只能读取UDP协议的数据。因此如果要访问其他协议发送数据必须使用原始套接字。 套接字通信的建立 服务端 首先服务器应用程序用系统调用socket来创建一个套接字它是系统分配给该服务器进程的类似文件描述符的资源它不能与其他的进程共享。socket服务器进程会给套接字起个名字我们使用系统调用bind来给套接字命名。然后服务器进程就开始等待客户连接到这个套接字。bind系统调用listen来创建一个队列并将其用于存放来自客户的进入连接。(listen)服务器通过系统调用accept来接受客户的连接。它会创建一个与原有的命名套接不同的新套接字这个套接字只用于与这个特定客户端进行通信而命名套接字即原先的套接字则被保留下来继续处理来自其他客户的连接建立客户端和服务端的用于通信的流进行通信。(accept--read/write)客户端 客户应用程序首先调用socket来创建一个未命名的套接字。socket将服务器的命名套接字作为一个地址来调用connect与服务器建立连接。connect一旦连接建立我们就可以像使用底层的文件描述符那样用套接字来实现双向数据的通信通过流进行数据传输(read/write)eg. 服务端代码 #include stdio.h #include stdlib.h #include sys/types.h //socket listen bind #include sys/socket.h//socket listen bind #include unistd.h//unlink #include sys/un.h//struct sockaddr_unint main() { /* delete the socket file */ unlink(server_socket); /* create a socket */ int server_sockfd socket(AF_UNIX, SOCK_STREAM, 0); struct sockaddr_un server_addr; server_addr.sun_family AF_UNIX; strcpy(server_addr.sun_path, server_socket); /* bind with the local file */ bind(server_sockfd, (struct sockaddr *)server_addr, sizeof(server_addr)); /* listen */ listen(server_sockfd, 5); char ch; int client_sockfd; struct sockaddr_un client_addr; socklen_t len sizeof(client_addr); while(1) { printf(server waiting:\n); /* accept a connection */ client_sockfd accept(server_sockfd, (struct sockaddr *)client_addr, len); /* exchange data */ read(client_sockfd, ch, 1); printf(get char from client: %c\n, ch); ch; write(client_sockfd, ch, 1); /* close the socket */ close(client_sockfd); } return 0; } 客户端代码 #include stdio.h #include stdlib.h #include sys/types.h //socket listen bind #include sys/socket.h//socket listen bind #include unistd.h//unlink #include sys/un.h//struct sockaddr_un int main() { /* create a socket */ int sockfd socket(AF_UNIX, SOCK_STREAM, 0); struct sockaddr_un address; address.sun_family AF_UNIX; strcpy(address.sun_path, server_socket); /* connect to the server */ int result connect(sockfd, (struct sockaddr *)address, sizeof(address)); if(result -1) { perror(connect failed: ); exit(1); } /* exchange data */ char ch A; write(sockfd, ch, 1); read(sockfd, ch, 1); printf(get char from server: %c\n, ch); /* close the socket */ close(sockfd); return 0; } 如果我们首先运行tcp_client会提示没有这个文件 因为我们是以AF_UNIX方式进行通信的这种方式是通过文件来将服务器和客户端连接起来的因此我们应该先运行tcp_server创建这个文件默认情况下这个文件会创建在当前目录下并且第一个s表示它是一个socket文件 程序运行的结果如下图 参考文章: 进程间通信IPC (InterProcess Communication)进程间通信--管道UNIX/Linux进程间通信IPC系列四消息队列Linux进程间通信(四) - 共享内存本地socket通讯转载于:https://www.cnblogs.com/joker-wz/p/11013086.html
http://www.zqtcl.cn/news/850391/

相关文章:

  • 找事做的网站杭州网站建设有限公司
  • 临沂网站建设搭建短视频如何引流与推广
  • 网站项目建设管理简介网络营销的概念
  • 网站后台怎么添加代码食品网站开发的背景
  • 茶楼 网站dedecms 旅游网站模板
  • 物流网站做那个好凯里网站设计
  • 网站 方案网页设计尺寸用怎么量
  • 商城购物网站设计内容互联网公司网站建设费用
  • 做租号玩网站赚钱吗网站下的源代码和自己做的区别
  • 关于校园网站的策划书久久建筑网的账号
  • 网站宣传的方式怎么查看一个网站有没有做推广
  • 台州房产网站建设自助开通网站
  • 佛山正规网站建设报价二级域名需要申请吗
  • 网站用户体验比较论坛类网站可以做移动端吗
  • 佛山网站优化建设网站设计公司种类
  • 永嘉高端网站建设效果空间设计手法有哪些
  • 好模板网站盐城做网站价格
  • 农村自建房设计图 效果图常州百度推广优化
  • 北京便宜网站建设为什么自己做的网站别的电脑打不开
  • 濮阳网站建设哪里便宜html页面模板
  • 个人推广网站wordpress 交友模板
  • 新乡网站建设价格中国反钓鱼网站联盟
  • 在线工具网站网站建设公司ejiew
  • 个人搭建网站教程王牌网站做代理
  • 网站地图什么意思电子商务营销推广
  • 手机排行榜网站教育平台网站开发
  • 佛山市顺德区建设局网站萧山网站建设
  • 合肥百度团购网站建设怀化网站开发
  • 网站建设ppt模板彩票网站开发dadi163
  • 网站建设4435建筑设计一般用什么软件