
《Linux操作系统》Linux高级编程
Bruceoxl
BruceOu,于2017年10月13日开始在优快云上写博客,博客专注于嵌入式开发、人工智能等。欢迎各位朋友来访!
邮箱: ouxiaolong@bruceou.cn
展开
-
《Linux操作系统 - 高级编程》第一部分 标准IO及文件IO(第1章 UNIX文件基础)
1.1文件类型在UNIX系统中,文件分为三类: 即普通文件、目录文件和特殊文件。 1.普通文件 也称正文文件,可以用来保存程序、数据等任何信息。这是一种无结构的,以512个字节为一块,顺序存取的流式文件。 2.目录文件 用于检索文件的文件。目录文件可能是系统文件,也可能是用户文件。 3.特殊文件 即设备。在UNIX系统中将设备也作为文件来处理,对于设备的所有操作都需要经过文件系统。原创 2018-01-10 18:44:18 · 1596 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第一部分 标准IO及文件IO(第2章 标准IO)
2.1文件I/O与标准文件I/O2.1.1文件I/O和标准I/O的概念文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linix或unix平台。 标准I/O:标准I/O是ANSI C建立的一个标准I/O模型,是一个标原创 2018-01-11 19:31:50 · 1413 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第一部分 标准IO及文件IO(第3章 文件IO)
3.1 /sys目录 图1 首先,对 /sys目录下的各个子目录进行具体说明: /sys/devices 该目录下是全局设备结构体系,包含所有被发现的注册在各种总线上的各种物理设备。一般来说,所有的物理设备都按其在总线上的拓扑结构来显示,但有两个例外,即platform devices和system devices。platform devices一般是挂在芯片内部的高速或者低速总原创 2018-01-12 21:27:31 · 695 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第一部分 标准IO及文件IO(第4章 静态库与动态库的使用)
库是一种软件组件技术,库里面封装了数据和函数。库的使用可以使程序模块化。 Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件)。 Linux通常把库文件存放在/usr/lib或/lib目录下。 Linux库文件名由:前缀lib、库名和后缀3部分组成,其中动态链接库以.so最为后缀,静态链接库通常以.a作为后缀。 Linux 应用开发通常要考虑三个问题,即: 1)在原创 2018-01-13 09:23:04 · 727 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第一部分 标准IO及文件IO(第5章 串口编程)
5.1串口概述随着嵌入式系统应用的发展,linux操作系统的应用也越来越广泛。linux作为一款免费的并且开放源代码的操作系统,与windows操作系统相比有许多独特的优势。linux可以进行定制内核;linux的gui图形界面能够任意选择;linux可以更方便、更安全地进行远程操作。随着linux操作系统的不断发展和完善,基于linux操作系统的软件开发也得到了长足的发展和应用。如果在工控领原创 2018-01-14 15:16:16 · 1063 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第一部分 标准IO及文件IO(第6章 文件锁)
当多个用户共同使用,操作一个文件的情况,Linux通常采用的方法就是给文件上锁,来避免共享资源产生竞争的状态。 文件锁有两种类型:建议性锁和强制性锁 建议性锁,也称协同锁。要求参与操作的进程之间协同合作。假设进程“A”获得一个WRITE锁,并开始向文件中写入内容;此时,进程“B”并没有试图获取一个锁,它仍然可以打开文件并向文件中写入内容。在此过程中,进程“B”就是一个非合作进程。如果进程“原创 2018-01-14 21:08:09 · 762 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第三部分 网络编程 (第1章 网络编程(基础篇))
1.1网络体系结构1.1.1 OSI模型和TCP/IP 模型网络体系结构指的是网络的分层结构以及每层使用的协议的集合。其中最著名的就是OSI协议参考模型,他是基于国际标准化组织(OSI)的建议发展起来的。它分为7个层次:应用层、表示层、会话层、传输层、网络层、数据链路层及物理层。 图1 这个7层的协议模型规定的非常细致和完善,但在实际中没有被广泛的使用,其中最重要的原因之一原创 2018-01-16 09:06:48 · 705 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第三部分 网络编程 (第2章 网络编程(socket)))
2.1网络编程基础2.1.1套接字概述套接字就是网络编程的ID。网络通信,归根到底还是进程间的通信(不同计算机上的进程间的通信)。在网络中,每一个节点(计算机或路由器)都有一个网络地址,也就是IP地址,两个进程通信时,首先要确定各自所在网络节点的网络地址。但是,网络地址只能确定进程所在的计算机,而一台计算机上很可能同时运行着多个进程,所以仅凭网络地址还不能确定到底是和网络中哪一个进程通原创 2018-01-16 18:25:17 · 961 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第三部分 网络编程 (第3章 服务器模型)
在网络通信过程中,服务端通常需要处理多个客户端。由于多个客户端的请求可能会同时到来,服务器端可采用不同的方法来处理。总体上来说,服务器端可采用两种模型来实现:循环服务器模型和并发服务器模型。 循环服务器模型是指服务器端依次处理每个客户端,直到当前客户端的所有请求处理完毕,再处理下一个客户端。这类模型的优点是简单,缺点显而易见。特别是TCP循环服务器模型,由于必须先处理完当前客户端,容易造成其他客原创 2018-01-16 21:41:51 · 619 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第三部分 网络编程 (第4章 网络编程(TCP/IP))
4.1 TCP/IP 数据包格式解析 图1 图中括号中的数字代表的是当前域所占的空间大小,单位是bit位。 黄色的是数据链路层的头部,一共14字节 绿色的部分是IP头部,一般是20字节 紫色部分是TCP头部,一般是20字节 最内部的是数据包内容黄色部分:链路层 目的MAC:当前step目的主机的mac地址 源MAC:当前step的源主机的mac地址 类型:指定网络层所用的原创 2018-01-16 22:08:48 · 638 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第三部分 网络编程 (第5章 网络编程(I/O模型))
Unix下可用的5种I/O模型: 1)阻塞I/O,进程处于阻塞模式时,让出CPU,进入休眠状态; 2)非阻塞I/O,非阻塞模式的使用并不普遍,因为非阻塞模式会浪费大量的CPU资源; 3)I/O复用(select和poll),针对批量IP操作时,使用I/O多路复用,非常有好; 4)信号驱动I/O(SIGIO) 5)异步I/O(POSIX的aio_系列函数) 一个输入操作通常包括两个不同的原创 2018-01-16 22:18:42 · 665 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第三部分 网络编程 (第6章 网络编程(高级篇))
6.1网络超时检测在网络通信过程中,经常会出现不可预知的各种情况。例如网络线路突发故障、通信一方异常结束等。一旦出现上述情况,很可能长时间都不会收到数据,而且无法判断是没有数据还是数据无法到达。如果使用的是TCP协议,可以检测出来;但如果使用UDP协议的话,需要在程序中进行相关检测。所以,为避免进程在没有数据时无限制的阻塞,使用网络超时检测很有必要。6.1.1套接字接收超时检测这里原创 2018-01-17 11:27:20 · 839 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第二部分 进程(第1章 进程基础)
1.1 Linux下多任务机制的介绍Linux有一特性是多任务,多任务处理是指用户可以在同一时间内运行多个应用程序,每个正在执行的应用程序被称为一个任务。 多任务操作系统使用某种调度(shedule)策略(由内核来执行)支持多个任务并发执行。事实上,(单核)处理器在某一时刻只能执行一个任务。每个任务创建时被分配时间片(几十到上百毫秒),任务执行(占用CPU)时,时间片递减。操作系统会在当前任原创 2018-01-17 19:43:52 · 1263 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第二部分 进程(第2章 线程基础A)
传统多任务操作系统中一个可以独立调度的任务(或称之为顺序执行流)是一个进程。每个程序加载到内存后只可以唯一地对应创建一个顺序执行流,即传统意义的进程。每个进程的全部系统资源是私有的,如虚拟地址空间,文件描述符和信号处理等等。使用多进程实现多任务应用时存在如下问题: 1)任务切换,即进程间上下文切换,系统开销比较大。(虚拟地址空间以及task_struct 都需要切换) 2)多任务之间的协作比较原创 2018-01-18 23:05:16 · 954 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第二部分 进程(第2章 线程基础B)
2.4多线程的同步与互斥2.4.1为什么要用多线程技术【1】避免阻塞,大家知道,单个进程只有一个主线程,当主线程阻塞的时候,整个进程也就阻塞了,无法再去做其它的一些功能了。 【2】避免CPU空转,应用程序经常会涉及到RPC,数据库访问,磁盘IO等操作,这些操作的速度比CPU慢很多,而在等待这些响应时,CPU却不能去处理新的请求,导致这种○3提升效率,一个进程要独立拥有4GB的虚拟地址原创 2018-01-19 18:41:41 · 590 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第二部分 进程(第3章 进程间的通信A)
现在再Linux应用较多的进程间通信方式主要有以下几种: 1)无名管道(pipe)及有名管道(fifo):无名管道可用于具有亲缘关系进程间的通信;有名管道除具有管道相似的功能外,它还允许无亲缘关系进程使用; 2)信号(signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程某事件发生。一个进程收到一个信号与处理器收到一个中断请求处理的过程类似; 3)消息队原创 2018-01-19 22:03:51 · 1071 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第二部分 进程(第3章 进程间的通信B)
3.4共享内存共享内存可以说是Linux 下最快速、最有效的进程间通信方式。两个不同进程A 、B 共享内存的意思是,同一块物理内存被映射到进程A 、B 各自的进程地址空间,进程A 可以即时看到进程B 对共享内存中数据的更新;反之,进程B 也可以即时看到进程A对共享内存中数据的更新。 这里简单说下映射的概念: Linux系统会为每个进程分配 4GB 的虚拟地址空间原创 2018-01-20 11:28:08 · 588 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第二部分 进程(第4章 进程相关)
4.1 Linux时间函数解析4.1.1 Linux下常用时间类型Linux下常用时间类型有四种:time_t、struct tm、struct timeval、struct timespec time_t时间类型 time_t类型在time.h中定义: #ifndef __TIME_T #define __TIME_T typedef long time_t;原创 2018-01-20 20:24:11 · 537 阅读 · 0 评论 -
《Linux操作系统 - 高级编程》第三部分 网络编程 (7 CAN编程)
CAN 是控制器局域网络(Controller Area Network,CAN)的简称,由德国 BOSCH 公司开发,并最终成为国际标准(ISO 11898-1)。CAN 总线主要应用于工业控制和汽车电子领域,是国际上应用最广泛的现场总线之一。7.1 CAN 总线简介CAN 总线是一种串行通信协议,能有效地支持具有很高安全等级的分布实时控制。 CAN 总线的应用范围很广,从高速的网络...原创 2018-06-28 14:59:50 · 2798 阅读 · 1 评论 -
《Linux操作系统 - 高级编程》第三部分 网络编程 (8 Linux下实现C语言的HTTP请求实现)
Linux下的http请求有许多种方式,其中curl库是C语言封装的一个强大的库,使用curl比封装socket更加方便。8.1 Curl使用Curl是一款著名的字符界面下的下载工具,支持HTTP、HTTPS、FTP、FTPS、DICT、TELNET、LDAP、FILE,和GOPHER。此外还具有cookies支持、断点续传、FTP上传、密码支持、SSL支持和代理支持等特性。curl同...原创 2018-06-28 15:13:07 · 3792 阅读 · 0 评论 -
深入剖析大小端
大小端1.大小端问题的由来关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须先打破鸡蛋较小的...原创 2019-08-18 10:19:00 · 1542 阅读 · 1 评论