![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux系统编程
RTC_Kai
学生
展开
-
ubuntu下生成简单部署文件
部署linux中部署类似win下快捷方式文件的设置ubuntu下的所有部署文件存放于在/usr/share/applications目录,文件后缀为.desktop一般我们可以根据里面文件内容仿制出我们需要的部署。简单设置:[Desktop Entry]Version=1.0 //版本号Encoding=UTF-8 //编码格式Name=Shotwell //显示名称Commen...原创 2019-11-06 14:53:06 · 86 阅读 · 0 评论 -
fwrite写文件的问题解析
标准I/O之fwrite分析情景分析:一般我们用fwrite都是想实现对某一文件进行写内容,特别是日志文件,记录信息,但是使用时会出现各种问题,这里给大家做实验,深入了解fwrite的用法。例子1:向日志文件daily.log以追加方式写入“zhangsan:hello ctime时间”char daily_data[1024] = {0}; time_t tm; ...原创 2019-10-14 14:26:03 · 2416 阅读 · 0 评论 -
socket编程笔记
客户端:fgets与recv重用时,应选择select,监控标准输入和套字节文件描述符send函数:不能往标准输入输出发送。只能由recv和read从套字节接收。原创 2019-10-11 18:53:53 · 98 阅读 · 0 评论 -
基于UDP传输层的广播与组播模型(简单易懂)
多播的引入解决广播中不干扰某些不关注该信息的主机,只有客户端加入指定多播组才能接受到消息,主要应用在UDP传输层,因为TCP协议中若发送端发送数据时,有一个客户端未接受到,他会要求发送端重新发送数据,这样其他接受到的客户端将再次接受到数据,导致数据很容易发生混乱。组播组可以是永久的也可以是临时的。组播组地址中,有一部份由官方分配的永久组播组。永久组播组保存不变的是他的ip地址,组中的成员构成可...原创 2019-10-10 15:14:14 · 662 阅读 · 0 评论 -
IO复用的总结 select poll epoll(好文分享)
时间复杂度的对比本来源自:https://www.cnblogs.com/aspirant/p/9166944.html(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越...转载 2019-10-09 14:26:01 · 117 阅读 · 0 评论 -
多路复用之epoll模型
EPOLL回顾select、poll机制:select与poll本质上都是监控描述符集内的事件,返回就绪态的文件描述符个数,同个文件描述符个数去遍历集合,找出是具体哪一个文件描述符有事件发生。select模型限于FD_SETSIZE(1024),poll对select进行了优化,不限描述符集的大小,并且函数更易于操作。epoll的引入目前epell是linux大规模并发网络程序中的热...原创 2019-10-08 20:15:30 · 172 阅读 · 0 评论 -
多路复用之POLL模型
多路复用之POLLpoll机制的引入:主要解决select中的文件描述符集上限FD_SETSIZE(1024);原理跟select类似,也是采用轮询形式。API:int poll(struct pollfd *fds, nfds_t nfds, int timeout);\参数1 struct pollfd { int fd; /* 文件描述符*/ short events...原创 2019-10-08 13:47:03 · 157 阅读 · 0 评论 -
多路复用IO模型之select与并发问题进一步优化
多路复用I/O多进程多线程的socket模型具有明显缺陷1.占用内存多 2.进程(线程)切换时间多。3.进程(线程)之间同步麻烦多路复用的解决理念:在主控线程中将需要监控的文件描述符保存到文件描述符集中,该文件描述符集为一个位图,我们知道文件描述符正常情况下总是累加上去的,也是一个整数,因此这个整数巧好可以表示该文件描述符在位图的位置(例如位图上的3号位置为1,表示文件描述符等于3有事件发...原创 2019-10-08 10:33:53 · 424 阅读 · 0 评论 -
线程池下的三种socket模型分析
基于线程池下的三种模型分析线程池:预先创建指定数量的线程,节省在实际应用中不断新建和回收子线程的时间。模型1每个线程都阻塞于accept上,当有客户端连接时,阻塞accept上的线程都被唤醒,竞争,只有一个线程去处理accept,其他线程继续阻塞。模型2设置一个主控线程,主控线程accept,其他任务线程等待主控线程分配任务模型3(效率最高)引入互斥锁,每个线程先争一把锁,谁抢到这把...原创 2019-10-08 10:09:22 · 139 阅读 · 0 评论 -
关于strtok 和 strtok_r的可/不可重入线程安全问题的探讨
线程安全多个线程对同一个变量进行操作时,为避免同时操作造成数据丢失,数据混乱,引入线程安全问题。以strtok与strtok_r为例strtok为不可重入函数——在对字符串分隔操作时,会对源字符串数据内存空间进行修改,即对分隔符替换成 ‘\0’ ,通过静态变量记录上一次扫描数组的位置,返回当前所截取的子字符串首地址,从而下一次扫描时,可以通过该静态变量获取第一个分隔符后一段字符串,反复...原创 2019-10-07 21:12:47 · 1867 阅读 · 0 评论 -
TCP流量控制与状态转换分析
TCP状态分析半连接态(FIN_WAIT_2):由于TCP为全双工通信,当客户端处于FIN_WAIT_2状态时,不能发数据包,只能接受包和发送ACK,也称半连接态,用shutdown实现,可中止一个方向的连接。Shutdown可直接关闭socket描述符,不考虑引用计数(区别于close)TCP流量控制回到UDP问题:如果发送端发送的速度较快,接收端接收到数据后处理的速度较慢,而接收缓冲...原创 2019-10-02 14:48:55 · 129 阅读 · 0 评论 -
socket API的错误处理
socket出错处理为使错误处理的代码不影响主程序的可读性,我们把与socket相关的一些系统函数加上错误处理代码包装成新的函数,做成一个模块wrap.c现附上代码:#include <stdlib.h>#include <errno.h>#include <sys/socket.h>void perr_exit(const char *s){...原创 2019-10-01 21:34:02 · 339 阅读 · 0 评论 -
linux多线程下之死锁
死锁本文中理论部分参考的博文:https://blog.csdn.net/zgege/article/details/80094813出现死锁需要同时满足四个条件,有一个不具备,系统就不会出现死锁。互斥条件。即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。这种独占资源如CD-ROM驱动器,打印机等等,必须在占有该资源的进程主动释放它之后,其它进程才能占有该资...原创 2019-09-29 23:45:31 · 328 阅读 · 2 评论 -
线程同步之条件变量 生产者和消费者模型
条件变量注意:需与互斥量一起使用,实现线程以互斥方式阻塞等待特定条件的发生(同步)使用步骤:定义条件变量初始化条件变量,初始化互斥量触发条件线程x:互斥量加锁->XX操作->触发条件变量->互斥量解锁循环等待条件线程y:互斥量加锁->等待条件变量->XX操作->互斥量解锁。注意:这里循环等待是避免等待线程由其他信号打断后被唤醒,需重新判断cond...原创 2019-09-29 19:52:52 · 174 阅读 · 0 评论 -
TCP/IP socket编程 并发服务器(多进程)
基于多线程的并发服务器注意:一般服务器都应该时守护进程,这里主要为了讲解并发的实现,所以未实现守护进程的功能。前言:我们知道在TCP/IP的协议下,服务器于客户端连接需通过三次握手,正常断开需通过四次,连接通过内核提供的函数accept阻塞等待客户端connect,并且服务器与客户端进行数据交互时,对于数据的接受发送(read/write)也都是阻塞等待,这会引起一个问题,即当服务器与客户1连...原创 2019-09-28 21:26:21 · 633 阅读 · 0 评论 -
创建守护进程的步骤与练习,每隔1s向time.log写入系统时间!
守护进程守护进程的概念Ssh、打印、ftp等均属于守护进程。进程类型为d。特点:始终在后台运行,独立于任何终端,周期性的执行某种任务或等待处理特定事件。会话和控制终端:linux以会话、进程组的方式管理进程,每个进程属于一个进程组,会话是一个或多个进程的集合。通常用户打开一个终端时,系统会创建一个会话,shell为会话的首进程,所有通过该终端运行的进程都属于这个会话,会话最多只能由一个控制...原创 2019-09-28 10:50:43 · 2040 阅读 · 0 评论 -
基于TCP/IP的socket编程
基于tcp/ip_socket编程代码实现功能:客户端发送字符串数据给服务器,服务器将其转为大写,返回给客户端服务器代码://server.c#include <sys/types.h>#include <sys/socket.h>#include <strings.h>#include <stdlib.h>#include <...原创 2019-09-25 23:27:33 · 300 阅读 · 0 评论 -
基于linux网络编程的基础
网络基础TCP/IP四层模型分为应用层、传输层、网络层和链路层。应用层:Telnet、ftp、e-mail等传输层:TCP和UDP网络层:IP、ICMP和IGMP链路层:网卡等设备驱动程序及接口卡链路层:有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机:是工作在链...原创 2019-09-25 23:12:59 · 255 阅读 · 0 评论