Linux应用程序设计(App)
文章平均质量分 81
elvinsys
实验代码库在:github.com/elvinsys
请多多指教!
展开
-
2-9 库函数调用方式文件编程
1. 基本概念 1.1 ——C库函数 独立于具体的操作系统,无论是在Linux、Windows或其他OS都能使用C库函数,提高了程序的移植性。 1.2 ——流 系统(程序)对文件(内存、网络连接或某个设备)进行数据的读写操作。 1.3 ——文件指针 类似于系统调用中的文件描述符FD,在库函数中使用FILE类原创 2016-09-12 08:07:31 · 523 阅读 · 0 评论 -
2-18 共享内存通信
(本节笔记的实验代码,在这里)1. 基本概念 共享内存是IPC机制中的一种,作用是使得两个不相关的进程访问同一段内存,是一种进程间传输数据的一种有效方式。 2. 函数学习 2.1 创建/获取共享内存 函数名: shmget 函数原型: man shmget原创 2016-09-13 20:37:19 · 296 阅读 · 0 评论 -
2-19 消息队列通信
(本节笔记的实验代码,在这里)1. 基本概念 消息队列是一个消息链表,每一条消息可看作一个记录,具有一定的格式的结构(struct)。一个进程向队列添加新消息,另一些进程可以从队列中读走消息,消息读走好就消失了。因此消息队列通讯作为IPC(进程间通信)存在。2. 函数学习 2.1 创建/打开消息队列 函数名:原创 2016-09-14 08:39:45 · 260 阅读 · 0 评论 -
2-20 多线程程序设计
1. 线程基本概念 线程与创建它的进程共享代码段和数据段,并拥有自己独立的栈,是“轻量级”的进程。 2. 函数学习 2.1 创建线程 函数名: pthread_create 函数原型: man pthread_create intpthread_c原创 2016-09-14 09:07:45 · 326 阅读 · 0 评论 -
2-21 多线程同步编程
(本节笔记的实验代码,在这里)1. 基本概念 多个线程按照规定的顺序来执行,即为线程同步。 2. 条件变量函数学习 2.1 初始化条件变量 函数名: pthread_cond_init 函数原型: man pthread_cond_init原创 2016-09-14 09:48:57 · 254 阅读 · 0 评论 -
2-22 网络协议分析及Linux网络编程模型
1. Linux网络模型/* 网卡驱动在OSI模型中属于数据链路层,在TCP/IP中属于网络接口层 */2. 协议分析 2.1以太网协议中协议和协议之间的关系 网络协议包含: 1. 多条规则 2. 数据包的格式原创 2016-09-14 10:33:08 · 479 阅读 · 0 评论 -
2-23 TCP网络程序设计
1. TCP编程模型函数化 1.1 server端函数 创建socket——>socket(); 绑定地址 ——>bind(); 监听端口 ——>listen(); 等待连接 ——>accept();原创 2016-09-14 10:54:04 · 393 阅读 · 0 评论 -
2-24 UDP网络程序设计
(本节笔记的实验代码,在这里)1. UDP编程模型函数化 1.1 server端函数 创建socket——>socket(); 绑定地址 ——>bind(); 接收数据 ——>recvfrom(); 发送数据 ——>sendto(); 结束连接 ——>close();原创 2016-09-14 11:30:33 · 296 阅读 · 0 评论 -
2-25 并发服务器程序设计
(本节笔记的实验代码,在这里)1. 并发服务器程序设计原因 采用轮询方式接收来自客户端的连接请求,服务器端只能按顺序处理数个客户端的连接请求,也就是只能处理完A客户端的连接和数据收发后,才能按顺序继续处理B和C的客户端的请求。2. 改善方法 服务器端采用多进程或多线程的方式,来同时并发处理来自多个客户端的连接请求。(若是TCP采用多进程方原创 2016-09-20 10:05:35 · 314 阅读 · 0 评论 -
2-26 守护进程程序设计
(本节笔记的实验代码,在这里)1. 基本概念 守护进程,也就是daemon(精灵)进程,是Linux中的一种服务进程。守护进程具有以下特点: 1.1 不占用控制终端,守护进程都在后台运行。([root]#./app &) 1.2 独立于控制终端。一般进程有对应的TTY(如PTS/8),但守护进程没有对应的控制终端,ps aux命令查看守护进程原创 2016-09-20 10:12:25 · 366 阅读 · 0 评论 -
2-27 shell脚本编程
(本节笔记的实验代码,在这里)1. 基本概念 脚本是一个包含一系列命令序列的文本文件。当运行该脚本文件时,文件中包含的命令序列将得到自动执行。 2. 脚本编程技术 2.1 基本结构『 #!/bin/sh ......原创 2016-09-20 10:19:06 · 291 阅读 · 0 评论 -
2-17 信号同步编程
(本节笔记的实验代码,在这里)1. 基本概念: 进程间的同步是指一组并发进程进行互相合作,互相等待,使得各进程按照一定的顺序执行的过程。2. 生产者与消费者问题 2.1 信号量sem_val初始值设为0 2.2 生产者每生产好一件产品,就sem_val + 1(释放信号量) 2.3 消费者开始因sem_val = 0而阻塞,原创 2016-09-13 20:01:30 · 265 阅读 · 0 评论 -
2-16 信号量互斥编程
(本节笔记的实验代码,在这里)1. 信号量 1.1 基本概念:主要用于保护临界资源(进程互斥),进程可以根据此判定是否能够访问某些共享资源。除了用于访问控制以外,还可用于进程间的同步。 1.2 分类:第一种是二值信号,只能取0或1;第二种是计算信号量,可取任意非负值。2. 函数学习 2.1 创建信号量集合 函数名:原创 2016-09-13 19:19:01 · 263 阅读 · 0 评论 -
2-15 信号通信编程
(具体的实验代码,在这里)1. 基础理论 1.1 信号(signal):进程最古老的通信方式———————————————————| 进程A/内核 | 进程B || 1.选择信号 |原创 2016-09-13 16:37:44 · 293 阅读 · 0 评论 -
2-8 系统调用方式的文件编程
1. 基本理论 在Linux中,所有打开的文件对应一个数字,该数字由系统自动分配,称为文件描述符。2. 文件操作 2.1 打开文件 函数名: open 函数原型: int open (const char *pathname, int flags);原创 2016-09-09 10:30:46 · 401 阅读 · 0 评论 -
2-6 静态函数库和动态函数库的建立
1. 函数库 Linux应用程序设计中,用到的外部函数主要由函数库和系统调用提供,函数库按照链接方式的不同,可分为静态链接库和动态链接库两种。2. 区别 静态链接库:在程序编译时,把库一起链接进程序,最后生成的可执行文件体积变大,但以后就不需要外部提供这个库,切运行速度更快。 动态函数库:在编译时不链接,在程序运行时才把动态库加原创 2016-09-09 10:05:09 · 339 阅读 · 0 评论 -
2-5 Linux编程规范
1. 文件头,如/*************************************** 文件名: addr.c ** 创建者: xyz ** 创建时间:20150606 ** 程序说明:打印原创 2016-09-09 09:34:50 · 258 阅读 · 0 评论 -
2-4 Linux应用程序地址分析
Linux应用程序在内存中包括几个段,分别是:代码段、数据段、bss断、堆(heap)和栈(stack)(涉及到链接器脚本,参考 1-1-4 链接器脚本)(一下的地址布局分析是针对32bit系统)1. 地址布局 1.1 从低地址到高地址,分别是:代码段、数据段、bss段和堆栈 1.2 堆向内存高地址生长,栈向内存低地址生长2. 查看范例程序地址分布的原创 2016-09-09 07:58:38 · 187 阅读 · 0 评论 -
2-3 Coredump程序故障分析
1. 定义:核心转存,当程序运行过程中发生异常时,Linux把程序出错时的内存内容存储在一个Core文件中。2. 处理对象:Segment fault(段错误)3. 产生原因:数组访问越界、访问空指针、栈溢出、修改只读内存等4. 用法:先打开ulimit -c unlimited 这个选项如果打开了,就有可能产生大量的文件,因此默认状态下是关闭的原创 2016-09-08 21:33:05 · 314 阅读 · 0 评论 -
2-10 时间编程
1. 基本概念——时间类型 UTC:Coordinated Universal Time(世界标准时间) GMT:Greenwich Mean Time(格林威治标准时间) Calendar Time:日历时间:从1970年1月1日0时0分0秒到现在所经历的秒数总和。2. 函数学习 2.1 获取日历时间 函数名:原创 2016-09-12 18:46:09 · 226 阅读 · 0 评论 -
2-11 进程控制理论
1. 进程的概念:一个具有独立功能的程序的一次运行。 程序的概念:存放在存储器中的一段代码2. 进程的特点:动态性、并发性、独立性、异步性3. 进程的状态:4. 进程的ID(PID):标示进程的唯一数字 父进程ID(PPID) 启动进程的用户ID(UID)5. 进程的互斥 当有若干进程都要使用某一资源时,因一原创 2016-09-13 09:35:21 · 262 阅读 · 0 评论 -
2-12 多进程程序设计
(本节笔记接上一节的进程控制,继续学习多进程的程序设计函数,详细的实验代码在这里)1. 创建进程 函数名: fork 函数原型: pid_t fork ( void ); 函数功能: 创建一个子进程原创 2016-09-13 09:36:48 · 448 阅读 · 0 评论 -
2-13 无名管道通信
1. Linux中进程间通信(IPC:Inter-Process Communication ) 基本原理 1.1 作用: 数据传输,一个进程需要把数据发送到另一个进程。 资源共享,多个进程共享同样的资源。 通知事情,一个进程需要向另一个(组)进程发送消息,通知它们发生了某件事(例如生产者消费者) 进程控制原创 2016-09-13 11:13:10 · 317 阅读 · 0 评论 -
2-14 有名管道通信
(本节笔记的实验代码可参考这里,不过,应该再可以优化一下,好像有bug)1. 有名管道的基本概念——FIFO文件,可用open,read,write等操作方式。2. 与普通的文件的区别: 读取FIFO文件的进程只能以“RDONLY”方式打开FIFO文; 写FIFO文件的进程只能以“WRONLY”方式打开FIFO文件; FIF原创 2016-09-13 15:03:45 · 408 阅读 · 0 评论 -
2-2 关于gdb的使用
在调试时遇到的一些奇怪的问题:1. 在用gdb调试程序的时候,有时候打印变量时,会出现的情况,可在编译的时候加上-O0选项。gcc默认用-O2进行优化编译,用-O0告诉编译器不进行优化,在调试的时候才能正常显示变量的值。当然在产品发布的时候应该去除-g和-O0选项。原创 2016-09-02 15:14:47 · 229 阅读 · 0 评论