- 博客(25)
- 资源 (7)
- 收藏
- 关注
原创 Make和Makefile
Makefile是一个神奇的东西,有了它只需一个make命令就可以让源文件按你的规则编译成你所想要的程序。非常简单,方便。对于Keil,VS等IDE,一般只需点一下绿色的三角按钮,就可以完成编译。但具体内部是怎么实现编译的?改动文件后如何只编译改动的文件?学完makefile就可以掌握这些东西,从而对系统编程会有更深层次的理解。 1、demo的目录结构2、使用Makefile...
2018-09-02 10:37:08 1408
原创 gcc/g++ 编译器
一、单个源文件生成可执行程序g++ -o helloworld helloworld.cpp$ ./helloworld //运行hello, world二、多个源文件生成可执行程序1、生成共享库和静态库(1)生成目标文件(.o)g++ -c say_hello.cpp say_goodby.cpp -I "../inc" // -I表示编译程序按照-I指定的路...
2018-09-01 17:21:06 1726
原创 Vim编辑器
Vim常用配置set nusyntax onset autoindentset smartindentset shiftwidth=4set tabstop=4set softtabstop=4set expandtabset showmatchhi MatchParen ctermbg=Yellow guibg=lightblue //更改vim高亮括号匹配颜色ino...
2018-09-01 16:59:42 348
原创 四个强大的linux文本处理工具(find、grep、sed、awk)
一、find 因为Linux下面一切皆文件,经常需要搜索某些文件来编写,所以对于linux来说find是一条很重要的命令。linux下面的find指令用于在目录结构中搜索文件,并执行指定的操作。它提供了相当多的查找条件,功能很强大。在不指定查找目录的情况下,find会在对整个系统进行遍历。即使系统中含有网络文件系统,find命令在该文件系统中同样有效。 在运行一个非常消耗资源的find命令时...
2018-09-01 16:50:50 2274
转载 Linux系统调用
一、系统调用概述 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。 从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核...
2018-09-29 20:30:03 317
原创 C++ memset()函数和bzero()函数
1、memset函数说明 memset()的函数, 它可以一字节一字节地把整个数组设置为一个指定的值。它把数组的起始地址作为其第一个参数,第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度。#include <string.h>// 将s中的前n个字节用ch替换并...
2018-09-29 20:14:35 12291
原创 C++中string、char *、char[]的转换
一、string转char* 有两种种方法可以将str转换为char*类型,分别是:data()、c_str()。string str = "hello";const char* p = str.data();const char *p = str.c_str();二、char * 转stringstring s;char *p = "hello";s = p;三、str...
2018-09-29 19:37:37 185
原创 信号发送与信号处理
一、信号发送1、kill函数 进程可以通过kill函数向包括它本身在内的其他进程发送一个信号,如果程序没有发送这个信号的权限,对kill函数的调用就将失败,而失败的常见原因是目标进程由另一个用户所拥有。#include <sys/types.h>#include <signal.h>int kill(pid_t pid, int sig);功能: 把信号s...
2018-09-27 21:08:03 3070
原创 信号的基本概念(信号产生于处理、可靠信号、可重入函数、SIGCHLD)
一、什么是信号1、信号的定义 信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。信号是软中断,通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。 一个完整的信号周期包括三个部分:信号的产生,信号在进程中的注册,信号在进程中的注销(由内部...
2018-09-27 19:45:43 2002
原创 进程关系
一、终端登录 1. 当系统自举时,内核创建进程 ID 为 1 的进程,也就是 init 进程。init 进程使系统进入多用户模式。init 进程根据配置文件 /etc/inittab 确定需要打开哪些终端,对每一个允许登录的终端设备,init 调用一次 fork,它所生成的子进程则执行 getty(exec)程序。(不同操作系统配置文件可能不同); 2. getty 为终端设备调用 open ...
2018-09-27 10:06:08 240
原创 进程间通信之共享内存
一、共享内存的定义和原理1、共享内存的定义 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入...
2018-09-24 21:03:41 1840 1
原创 进程间通信之信号量
一、信号量的定义和原理1、一些概念原子操作:不可中断的一个或者一系列的操作,即一件事要么做要么不做。临界资源:不同进程能够看到的一份公共资源,一次只能被一个进程使用。PV操作:由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的:P(sv):如果sv的值大于零,就给它减1;如果它的值为零,就挂起该进程的执行;V(sv):如果有其他进程因等待sv而被...
2018-09-24 20:07:47 885 1
原创 进程间通信之消息队列
一、消息队列的定义和特点1、消息队列的定义 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题(命名管道要读端和写端都存在,否则出现阻塞)。但是消息队列与命名管道一样,每个数据块都有一个最大...
2018-09-24 16:29:17 597
原创 进程间通信之管道(pipe)和命名管道(FIFO)
一、管道(pipe)1、管道的定义和特点 管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称为半双工管道。管道的这一特点决定了器使用的局限性。管道是Linux支持的最初Unix IPC形式之一,具有以下特点:数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,需要建 立两个管道;管道只能用于父子进程或者兄弟进程间通信。,也就是说管...
2018-09-24 11:16:35 11047 5
原创 特殊进程之守护进程
一、什么是守护进程 守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在...
2018-09-23 16:14:22 306
原创 进程体替换(exec函数族)与调用命令行(system)
一、进程体替换(exec函数族) 使用函数fork()创建新的子进程后,子进程往往需要调用函数exec()以执行另一个程序。当进程调用函数exec()时,该进程执行的程序完全替换为新程序,而新程序则从其函数main()开始执行。 与 fork 或 vfork 函数不同,exec 函数不是创建调用进程的子进程,而是创建一个新的进程取代调用进程自身。新进程会用自己的全部地址空间,覆盖调用进程的...
2018-09-20 11:02:42 1906 1
原创 进程资源回收(wait、waitpid)
一、wait函数#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *status);成功返回所回收子进程的 PID,失败返回 -11、函数功能与参数解析 主要用于挂起正在运行的进程进入等待状态,直到有一个子进程终止。 status 是一个整型指针,如果 status 不是一个空指针,则终止...
2018-09-20 10:36:10 3532
原创 进程标识与进程创建(pid, fork)
一、进程标识(pid) 每个进程都有一个非负整数形式的唯一编号,即 PID。PID 在任何时刻都是唯一的,但是可以重用,当进程终止并被回收以后,其 PID 就可以为其它进程所用。进程的 PID 由系统内核根据延迟重用算法生成,以确保新进程的 PID 不同于最近终止进程的 PID。1、特殊的进程标识0 号进程,调度进程:通常是调度进程,常常被称为交换进程(swapper)。该进程是内核的一...
2018-09-20 10:28:48 5385
原创 进程环境
一、进程的基本概念1、基本概念(1)进程的定义 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位。 进程和程序是有本质区别的:程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念;而进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和消亡的整个过程。(2)进程控制块(PCB) Linux系统通过进...
2018-09-19 20:39:02 1313
原创 文件系统和目录结构
Linux以文件的形式对计算机中的数据和硬件资源进行管理,也就是彻底的一切皆文件,反映在Linux的文件类型上就是:普通文件、目录文件(也就是文件夹)、设备文件、链接文件、管道文件、套接字文件(数据通信的接口)等等。而这些种类繁多的文件被Linux使用目录树进行管理, 所谓的目录树就是以根目录(/)为主,向下呈现分支状的一种文件结构。不同于纯粹的ext2之类的文件系统,我把它称为文件体系,一切...
2018-09-14 16:22:54 5405
原创 文件I/O
文件I/O也称系统调用I/O,是操作系统“用户态”运行的进程和硬件交互提供的一组接口,即操作系统内核留给用户程序的一个接口。 在C语言中常见的输入输出函数(scanf,printf)实际上都是调用了文件I/O函数,因为系统API效率高,一次性读取。一、函数open(打开/创建 一个文件/设备)#include &lt;sys/types.h&gt;#include &lt;sy...
2018-09-12 20:43:45 378
转载 算法高效技巧之打表
打表是一种典型的用空间换时间的技巧,一般指将所有可能需要用到的结果事先计算出来,这样后面需要用到时就可以直接查表获得。打表常见的用法有如下几种:1、在程序中一次性计算出所有需要用到的结果,之后的查询直接取这些结果 这个是最常用到的用法,例如在一个需要查询大量Fibonacci数F(n)的问题中,显然每次从头开始计算是非常耗时的,对Q次查询会产生O(nQ)的时间复杂度;而如果进行预处理...
2018-09-08 19:19:24 6637 2
原创 Shell脚本入门
一、Shell简介 Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用大量系统内部的功能来解释执行程序,如果熟练掌握Shell脚本,可以让我们操作计算机变得更加轻松,也会节省很多时间。 Shell可以被称作是脚本语言,...
2018-09-02 11:10:31 356
原创 常用linux命令
一、预备知识1、linux目录结构 2、linux命令格式 二、文件管理 1、文件和目录cd /home 进入 '/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 cd - 返回上次所在的目录 pwd 显示工作路径 ls 查看目录中的文件 ls...
2018-09-01 16:14:39 242
visio2007教程
2018-07-30
凸优化经典书籍(Stephen Boyd和Lieven Vandenberghe)
2018-07-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人