Linux C编程
文章平均质量分 82
root_robot
这个作者很懒,什么都没留下…
展开
-
嵌入式课堂小测试(二)
编写一程序,实现把一个文件的内容复制到另一个文件中的功能。可以参照Linux下cp命令所实现的功能来实现。程序源代码如下:(自行编写并调试通过,请勿复制上课时所提供的代码)#include #include #include #include #define MAX_SIZE 2048int main(int argc, char * argv[]){原创 2017-03-18 21:38:12 · 598 阅读 · 0 评论 -
IP地址分类
一、IP地址的介绍 1、IP地址的表示方法 IP地址 = 网络号+主机号 把整个Internet网堪称单一的网络,IP地址就是给每个连在Internet网的主机分配一个在全世界范围内唯一的标示符,Internet管理委员会定义了A、B、C、D、E五类地址,在每类地址中,还规定了网络编号和主机编号。在 TCP/IP协议中,IP地址是以二进制数字形式出现的,共32bit,1bi原创 2016-12-05 21:27:34 · 437 阅读 · 0 评论 -
TCP/IP参考模型及每层所用的协议、OSI参考模型
OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 。 完成中继功能的节点通常称为中继系统。在OSI七层模型中,处于不同层的中继系统具有不同的名称。 一个设备工作在哪一层,关键看它工作时利用哪一层的数据头部信息。网桥工作时,是以MAC头部来决定转发端口的,因此显然它是数据链路层的设备。具体说: 物理转载 2016-12-04 21:59:07 · 1501 阅读 · 0 评论 -
STDIN_FILENO的作用及与stdin 的区别
1.STDIN_FILENO的作用STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备(一般是键盘)的文件描述符。2.区别1)数据类型不一致:转载 2016-11-15 21:53:24 · 284 阅读 · 0 评论 -
嵌入式系统编程C语言之软件架构
模块划分 模块划分的“划”是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念: (1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明; (2转载 2016-11-14 22:15:30 · 367 阅读 · 0 评论 -
Linux网络编程:网络服务器的分类及运用
一、在之前设计的网络编程服务器中,涉及到的服务器都是最为简单的、一对一的服务器,也就是只与一个客户端建立通信。然而在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求, 对服务端的程序就提出了特殊的要求。二、循环服务器和并发服务器1、循环服务器:循环服务器描述了在一个时刻只处理一个请求的服务器实现方式,通过在单线程内设置循环控制实现对多个客户端请求的逐转载 2016-11-16 19:04:44 · 421 阅读 · 0 评论 -
单片机扩展IO口
单片机如何扩展IO口?首先我们先讲讲为什么要扩展IO口。在我们使用51单片机的时候,有时候会出现IO口不够用的情况。比如键盘!这个时候IO口的资源就十分有限了。按键是我们常用的器件,做某些东西的时候又不能缺少按键。如果一个按键对应一个IO口,那么可想而知,按键所占的IO口的数量是很大的。单片机IO口的资源是有限的,因此我们要采取一些方法来扩展单片机的IO口,控制按键所占的单片机IO原创 2016-11-12 21:06:04 · 3450 阅读 · 0 评论 -
Linux多线程
一、线程的特点1. 线程是进程的一个执行流,是CPU调度和分配的基本单位。线程是程序运行的最小单位。2. 线程不会影响到其它线程的运行。比如一个线程崩溃,其它线程正常运行。3. 同一进程内的线程共享进程的地址空间。二、一个线程的组成1. 一个指向当前被执行指令的指令指针2. 一个栈空间3. 一个寄存器值的集合4. 一个私有原创 2016-10-31 22:15:44 · 286 阅读 · 0 评论 -
简单数据库编写的简易通讯录
[html] view plain copy #include stdio.h> #include string.h> #include stdlib.h> #include sqlite3.h> #define MAX_SIZE 1024 static sqlite3 *db = NULL; static cha原创 2016-11-11 21:25:08 · 660 阅读 · 0 评论 -
【Linux C编程】sizeof面试题选
结构体和共用体的内存分配是C语言的一个难点,也是面试题中的热点。 示例1: Union data1 { double d; int i; char c1; char c2[9]; };sizeof(union data1)的值为16.在编译器默认设置的情况下,该共用体最大基本类型为double,它占8字节,所以此共用体以8来对齐。字符数组c2占9个字节,那么转载 2016-11-23 18:37:22 · 329 阅读 · 0 评论 -
进程和线程间的关联和区别
进程概念 进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。在Mac、Windows NT等采用微内核结构的操作系统中,进程的功能发生了原创 2016-11-24 21:04:18 · 708 阅读 · 0 评论 -
嵌入式课堂小测试(一)
用C语言编写一个源程序文件main.c,要求实现以下功能。 (1) 打开当前目录下的文件 foo.txt,并将其内容显示出来。如果该文件不存在,就报告错误并退出。可以参照Linux下cat命令所实现的功能来实现。 (2) 编写一个能够利用make实现自动编译的文件Makefile,以便生成可执行文件main。main.c 的源代码如下:(要求通过实际运行调试,程序原创 2017-03-18 21:36:36 · 654 阅读 · 0 评论 -
DNS的工作原理及解析
一、什么是DNS?DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。你可以把它想象成一本巨大的电话本。举例来说,如果你要访问域名math.stackexchange.com,首先要通过DNS查出它的IP地址是151.101.129.6转载 2016-12-25 21:24:58 · 21799 阅读 · 2 评论 -
shell基础入门
Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多数情况下,这些脚本同样可以在 bash的大姐,bourne shell中运行)。 如同其他语言一样,通过我们使用任意一种文字编辑器,比如nedit、kedit、emacs、v原创 2016-12-21 20:43:31 · 314 阅读 · 0 评论 -
I/O多路复用- select函数
I/O 多路复用阻塞函数在完成其指定的任务以前不允许程序继续向下执行。如:当服务器运行到accept语句时而没有客户端请求连接,服务器就会停止在accept语句上等待连接请求的到来,这种情况称为堵塞,而非堵塞操作则可以立即完成。如:如果你希望服务器仅仅检查是否有客户在等待连接,有就接受连接,否则就继续做其他的事情,则可以通过使用select系统调用来实现,除此之外,select还可以同时监原创 2016-12-09 23:06:02 · 313 阅读 · 0 评论 -
socket网络编程基础
1、网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:消息传递(管道、FIFO、消息队列)同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)共享内存(匿名的和具名的)远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯转载 2016-11-26 21:04:53 · 368 阅读 · 0 评论 -
TCP协议与UDP协议的区别
TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。 TCP/IP协议集包括应用层,传原创 2016-12-08 21:45:54 · 271 阅读 · 0 评论 -
条件编译解析
这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2转载 2016-11-25 21:57:17 · 456 阅读 · 0 评论 -
三次握手、四次挥手
TCP三次握手所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。第一次握手: 客户端发送一个TCP的SYN标志位置1的包指明原创 2016-12-07 20:27:10 · 335 阅读 · 0 评论 -
linux进程调度介绍
一、Linux新老版本调度器对比在 2.6 版本的内核之前,当很多任务都处于活动状态时,调度器有很明显的限制。这是由于调度器是使用一个复杂度为 O(n) 的算法实现的。在这种调度器中,调度任务所花费的时间是一个系统中任务个数的函数。换而言之,活动的任务越多,调度任务所花费的时间越长。在任务负载非常重时,处理器会因调度消耗掉大量的时间,用于任务本身的时间就非常少了。因此,这个算法缺乏可伸缩性转载 2016-10-20 22:15:08 · 487 阅读 · 0 评论 -
利用两个线程实现生产者消费者模型
代码如下:[html] view plain copy #include stdio.h> #include stdlib.h> #include string.h> #include pthread.h> #include semaphore.h> #define TEXT_SZ 1024 s原创 2016-10-30 22:22:24 · 2197 阅读 · 0 评论 -
exec族函数解析
一、fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换了。另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可原创 2016-10-19 21:26:33 · 390 阅读 · 0 评论 -
进程间的通信之信号通信
1、 kill 函数的作用:传递信号给指定的进程函数的原型:int kill(pid_t pid, int sig)函数的参数:pid: > 0,指定的进程pid pid:=0,发送给目前进程相同进程租的所有进程 Pid : -1,广播给系统的所有的进程原创 2016-10-26 22:15:24 · 325 阅读 · 0 评论 -
linux进程调度介绍
一、Linux新老版本调度器对比在 2.6 版本的内核之前,当很多任务都处于活动状态时,调度器有很明显的限制。这是由于调度器是使用一个复杂度为 O(n) 的算法实现的。在这种调度器中,调度任务所花费的时间是一个系统中任务个数的函数。换而言之,活动的任务越多,调度任务所花费的时间越长。在任务负载非常重时,处理器会因调度消耗掉大量的时间,用于任务本身的时间就非常少了。因此,这个算法缺乏可伸缩性转载 2016-10-16 21:43:46 · 350 阅读 · 0 评论 -
进程间的通信方式之管道通信
一、管道通信的特点1. 管道是单向的,先进先出的。2.一个进程在管道尾部写入数据,另一个进程在管道头部读取数据。因此管道通信是半双工的。3. 管道提供了简单的流控制机制,当进程试图读空管道时,进程将阻塞。当管道已经写满时,进程再试图向管道写入数据,进程将阻塞。4.数据被进程读出,将从管道中删除二、管道通信的区别1、有名管道2、无名管道原创 2016-10-25 23:06:12 · 1232 阅读 · 0 评论 -
线程之间的互斥和同步
概述 由于线程共享进程的资源和地址空间,因此在对这些资源进行操作时,必须考虑到线程间资源访问的同步与互斥问题。这里主要介绍Posix中两种线程同步机制,分别为互斥锁和信号量。这两个同步机制可以通过互相调用对方来实现,但互斥锁更适用于同时可用的资源是唯一的情况;信号量更适用于同时可用的资源为多个的情况。互斥锁 互斥锁是用一种简单的加锁方法来控制对共享资源的原子操作。这转载 2016-11-05 21:25:35 · 417 阅读 · 0 评论 -
进程
1、进程是一个具有独立功能的程序的一次运行活动,也是资源分配的最小单元2、程序和进程的区别:①程序是放在磁盘里的可执行文件,进程是程序执行的异性实例 ②程序是静态的,进程是动态的 ③程序是长久的,进程是暂时的3、进程的组原创 2016-10-24 22:55:41 · 258 阅读 · 0 评论 -
带缓存的I/O操作
1、标准的I/O提供了三种类型的缓冲:全缓冲、行缓冲、不带缓冲2、全缓冲:在填满标准的I/O缓冲区后才进行实际的I/O操作3、行缓冲:当在输入和输出中遇到换行符是,标准的I/O库执行I/O操作4、不带缓冲:标准的I/O库不对字符进行行缓冲储存5、fopen函数作用:打开文件函数原型:FILE *fopen(const char *path, const char *mode原创 2016-10-23 21:37:08 · 283 阅读 · 0 评论 -
Linux C 文件操作及小结
1、文件创建 -- creat函数原型:int creat(const char *pathname, mode_t mode);函数参数:pathname --创建的文件名 mode --创建的方式S_IRUSR:可读S_IWUSR:可写S_IXUSR:可执行S_IRWXU:可读可写可执行0755 --> 111 101 101原创 2016-10-22 21:43:22 · 430 阅读 · 0 评论 -
linux 数据库
1、 Sqlite3_open函数的作用:打开一个数据库函数的原型:int sqlite_open(const char *dbname, sqlite **db)函数的参数:dbname:数据库的名称 db:数据库的句柄返回值:操作成功:SQLITE_OK;头文件:#include 2、 sqlite3_c原创 2016-11-02 22:29:49 · 326 阅读 · 0 评论 -
Linux 网络编程
1、 socket函数的作用:建立一个新的socket套接字函数的原型:int socket(int domain,int type, int protocol)函数的参数:domian:表示使用何种地址类型 AF_INET,IPV4网络协议 AF_INET6,IPV6网络协议原创 2016-11-07 21:08:54 · 257 阅读 · 0 评论 -
sqlite数据库及常用命令
一.数据库综述数据库(DataBase,简记为DB)就是一个有结构的、集成的、可共享的统一管理的数据集合。它不仅包括数据本身,而且包括相关数据之间的联系。数据库技术主要研究如何存储、使用和管理数据;* 有结构的,指的是数据是按一定的模型组织起来的。* 集成的指的是数据库中集中存放着企业各种各样的数据,集中存放的好处是:一个数据只需一个备份,重复存储少,即消除了数据的冗余。原创 2016-11-07 21:10:59 · 422 阅读 · 0 评论 -
Linux C ----信号
一、信号量的概念1、信号量(信号灯):与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制,主要用途是保护临界资源,相当于内存中的标志,进程可以根据它判断是否能够访问某些共享资源,同时,进程也可以修改标志,除了用于访问控制外,还可用于进程同步,信号量还可以保护进程间的同步互斥。2、同步:进程间按一定的顺序去执行3、互斥:某一进程占用资源时,只有其释放资源后其原创 2016-10-29 23:43:27 · 449 阅读 · 0 评论 -
7种排序算法的介绍(常用)
一、快速排序1. 简单介绍 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少转载 2016-11-10 13:36:43 · 367 阅读 · 0 评论 -
Linux网络通信TCP/IP
一、网络通信网络是通过物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的,通过信息交换实现人与人、人与计算机、计算机与计算机之间的通信。1. 网络通信要遵守网络协议,局域网中最常用的有三个网络协议:MICROSOFT的NETBEUI、NOVELL的IPX/SPX和TCP/IP协议。a> NetBEUI - 网络基本输入输出系统扩展原创 2016-11-10 13:31:48 · 839 阅读 · 0 评论 -
Linux进程间的通信方式----消息队列
1. 消息队列就是一个消息的链表。可以把消息看做一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新信息,对消息队列有读权限的进程可以从消息队列中读走消息,消息队列是随内核持续的。每个消息队列都有一个队列头,用结构struct msg_queue来描述。队列头中包含了该消息队列的大量信息,包括消息队列键值,用户ID,组ID,消息队列中消息数目等,甚至记录了原创 2016-10-28 23:26:14 · 401 阅读 · 0 评论 -
奇偶校验、CRC校验、海明码校验
一、奇偶校验根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。 校验方法 奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为转载 2016-11-08 21:49:02 · 1577 阅读 · 0 评论 -
信号通信之共享内存
一、共享内存的概念共享内存就是允许多个不相关的进程访问的同一个物理内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种最快的方法,不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址。而如果某个进程向共享内存写入数据,所做的数据变化将立即影响到可以访问同一段共享内存的任何其他进程且这些进程能够原创 2016-10-28 09:40:58 · 362 阅读 · 0 评论 -
[Linux C编程]文件操作
文件操作1. Linux系统调用及用户编程接口(API) 所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务为什么用户程序不能直接访问系统内核提供的服务呢? 由于在Linux中,为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不转载 2016-10-17 21:09:53 · 347 阅读 · 0 评论 -
文件锁
1、当多个用户同时访问一个文件的时候,Linux会采取给文件上锁的机制防止共享资源产生竞争状态。于是便有了文件锁的概 念。2、文件锁包括建议性锁和强制性锁。 建议锁要求每个上锁文件的进程都要检查是否有锁存在,并且尊重已有的锁。在一般情况下内核和操作系统都不使用建议 性锁。 3、强制性锁是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对该文件进转载 2016-10-21 20:44:09 · 359 阅读 · 0 评论