Unix环境编程
Tavi_
这个作者很懒,什么都没留下…
展开
-
TLV封包与解包详解
何谓TLV所谓通讯协议就是指通信双方对数据传送控制的一种约定。约定中包括对数据格式,同步方式,传送速度,传送步骤,纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守,倘若一方不遵守,便会直接导致数据不能被解析!更通俗来讲,它可以理解两个节点之间为了协同工作实现信息交换,协商一定的规则和约定,例如规定字节序,各个字段类型等。Tag:标记Length:一般为value的长度,也可...原创 2020-04-25 22:17:39 · 3346 阅读 · 0 评论 -
Makefile使用详解
在 Linux(unix )环境下使用GNU 的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入一些时间去完成一个或者多个称之为Makefile 文件的编写。所要完成的Makefile 文件描述了整个工程的编译、连接等规则。makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令...原创 2020-04-05 22:46:35 · 631 阅读 · 0 评论 -
Linux下fork与写时拷贝技术(COW)详解
1. 写时拷贝的概念Linux在使用fork()函数进程创建时,传统fork()的做法是系统把所有的资源复制给新创建的进程,这种方式不仅单一,而且效率低下。因为所拷贝的数据或别的资源可能是可以共享的。现在Linux的fork()使用写时拷贝页来实现新进程的创建,它是一种可推迟甚至避免数据拷贝的技术,刚开始时内核并不会复制整个地址空间,而是让父子进程共享地址空间,只有在写时才复制地址空间,使得父子...原创 2020-03-31 23:36:10 · 3252 阅读 · 0 评论 -
温度采集实时上报——服务端(epoll)
文章目录1. Linux中提供的epoll相关函数如下:2. 服务器要求和功能分析都类似,不再赘述,可参考下面链接:3. 代码模块分析create_database 创建数据库模块socket_server_init服务器端初始化server_epoll主函数4. 服务器运行结果5. 客户端代码相同,方便查看直接贴出运行结果在linux的网络编程中,很长的时间都在使用select来做事件触发。...原创 2020-03-31 20:51:53 · 902 阅读 · 0 评论 -
温度采集实时上报——服务端(poll)
文章目录1. 服务器要求和功能分析都类似,不再赘述,可参考下面链接:2. 代码模块分析create_database 创建数据库模块socket_server_init服务器端初始化server_poll主函数3. 服务器运行结果4. 客户端代码相同,方便查看直接贴出运行结果1. 服务器要求和功能分析都类似,不再赘述,可参考下面链接:温度采集实时上报——服务端(多进程)2. 代码模块分析...原创 2020-03-24 23:12:30 · 454 阅读 · 0 评论 -
温度采集实时上报——服务端(select)
1. 服务器要求和功能分析都类似,不再赘述,可参考下面链接:温度采集实时上报——服务端(多进程)2. 代码模块分析create_database 创建数据库模块create_database.h 创建数据库的头文件#ifndef CREATE_DATABASE_H#define CREATE_DATABASE_Hint create_database(void);#endif...原创 2020-03-22 10:32:23 · 784 阅读 · 0 评论 -
温度采集实时上报——服务端(多线程)
要求和功能分析都一样这里代码与多进行都很类似,只是创建子线程与创建子进程有些区别。可以参考第一个客户端和多进程服务端里面写的比较完整:文章审核中。。。。代码如下:/********************************************************************************* * Copyright: (C) 2019 Ta...原创 2020-03-18 23:20:51 · 489 阅读 · 0 评论 -
温度采集实时上报——服务端(多进程)
1. 服务端要求1, 服务器程序运行在Linux服务器或同一个树莓派上(远程登录);2, 通过命令行指定监听的端口;3, 程序放到后台运行,并通过syslog记录程序的运行出错、调试日志;4, 程序能够捕捉kill信号正常退出;5, 服务器要支持多个客户端并发访问,可以选择多路复用、多进程或多线程任意一种实现;6, 服务器收到每个客户端的数据都解析后保存到数据库中,接收到的...原创 2020-03-18 23:01:53 · 838 阅读 · 0 评论 -
温度采集实时上报——客户端
1. 客户端要求树莓派上运行socket客户端程序,每隔30秒(可指定)以字符串“ID/时间/温度”形式上报采样温度,其中ID为树莓派的编号,便于服务器端区别是哪个树莓派客户端,如RPI0001/2019-01-05 11:40:30/30.0C通过命令行参数指定服务器IP地址和端口以及间隔采样时间, getopt或getopt_long;程序放到后台运行(daemon),并通过syslo...原创 2020-03-17 23:12:56 · 1269 阅读 · 0 评论 -
Linux下文件I/O详解与DS18B20温度采集
Linux下文件I/O详解1. 文件I/O与标准I/O区别2. 文件描述符3. open / creat函数4. close函数5. lseek函数6. read / write函数7. DS18B20温度采集1. 文件I/O与标准I/O区别文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O),不带缓存指的是每个read和write都调用内核中的一个系统调用,也就是一般所...原创 2020-03-16 12:25:18 · 368 阅读 · 0 评论 -
系统调用与标准库函数区别
一、系统调用系统调用,我们可以理解是操作系统为用户提供的一系列操作的接口(API),这些接口提供了对系统硬件设备功能的操作。系统调用是操作系统的一个入口点,在内核地址空间执行,需要在用户空间和内核上下文环境间切换,开销较大。系统中的各种共享资源都由操作系统统一掌管,在用户程序中,凡是与硬件资源有关的操作(如存储分配、进行I/0传输以及管理文件等),都必须通过系统调用方式向操作系统提出服务请...原创 2020-03-13 16:41:43 · 1130 阅读 · 0 评论 -
Linux下进程与线程的区别
多进程进程是程序在计算机上的一次执行活动,即正在运行中的应用程序,通常称为进程。当你运行一个程序,你就启动了一个进程。每个进程都有自己独立的地址空间(内存空间),每当用户启动一个进程时,操作系统就会为该进程分配一个独立的内存空间,让应用程序在这个独立的内存空间中运行。进程一般由程序、数据集合和进程控制块三部分组成。程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需...原创 2020-03-02 14:19:13 · 564 阅读 · 0 评论 -
进程间通信IPC
如果多个进程之间需要协同处理某个任务时,这时就需要进程间的同步和数据交流。常用的进程间通信(IPC,Inter- Process Communication)的方法有:1. 信号 ( Sinal ): 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生;2. 管道(Pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(通常是指父子进程关系)的进程间使用...原创 2020-02-26 11:55:29 · 238 阅读 · 0 评论 -
linux编程之select、poll、epoll区别
select、poll、epoll都是Linux下的IO多路复用(IO Multiplexing)模型,详细可参考如下链接:Linux下五种IO模型与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。select优点:基于select的I/O多路复用模型的是单进程执行可以为多个客户端服务,这样可以...原创 2020-02-25 19:59:28 · 408 阅读 · 0 评论 -
Linux下五种IO模型
在Linux下进行网络编程时,服务器端编程经常需要构造高性能的IO模型,常见的IO模型有五种:同步阻塞IO(Blocking IO)即传统的IO模型,在linux中默认情况下所有的socket都是阻塞模式。当用户进程调用了 read()这个系统调用,内核就开始了IO的第一个阶段:准备数据。对于网络IO来说,很多时候数据在一开始还没有到达(比如, 还没有收到一个完整的UDP包),这个时候内核就要...原创 2020-02-22 09:22:16 · 271 阅读 · 0 评论 -
互斥锁、自旋锁详解
互斥锁如果一个资源会被不同的线程访问修改,那么我们把这个资源叫做临界资源(《操作系统》),那么对于该资源访问修改相关的代码就叫做临界区。引入互斥锁即解决多个线程之间共享同一个共享资源,这是多线程编程需要考虑的一个问题。互斥锁又称互斥型信号量,是一种特殊的二值性信号量,用于实现对共享资源的独占式处理。任意时刻互斥锁的状态只有两种:开锁或闭锁。当有任务持有时,互斥锁处于闭锁状态,这个任务获得该互...原创 2020-02-18 17:09:51 · 726 阅读 · 0 评论 -
linux多进程编程中,子进程继承父进程哪些东西
子进程得到父进程东西的 拷贝,不是它们本身。父进程和子进程拥有独立的地址空间和PID参数子进程继承父进程进程的资格(真实(real)/有效(effective)/已保存(saved) 用户号(UIDs)和组号(GIDs)) 环境(environment)变量堆栈内存打开文件的描述符(注意对应的文件的位置由父子进程共享,这会引起含糊情况)执行时关闭(close-on-exec) 标志...原创 2020-02-11 13:54:01 · 2255 阅读 · 0 评论