- 博客(98)
- 资源 (718)
- 收藏
- 关注
原创 Unix/Linux环境C编程入门教程(42) 终端控制篇
getopt(分析命令行参数) 相关函数 表头文件 #include定义函数 int getopt(int argc,char * const argv[ ],const char * optstring);函数说明 getopt()用来分析命令行参数。参数argc和argv是由main()传递的参数个数和内容。参数optstring 则代表欲处理的选项字符串。此函数会返回在argv 中下一个
2014-07-31 23:20:20 1961
原创 Red Hat Enterprise Linux 7的新功能
简介红帽最新版本的旗舰平台交付显著增强的可用性、 性能和可靠性。 丰富的新功能为架构、 系统管理员和开发人员提供所需的资源以更高效地进行创新和管理。架构师: 红帽® 企业 Linux® 7 适合您选择的任意基础架构, 它可以高效地与其他操作环境、 身份验证和管理系统集成到一起。 无论您是要构建网络密集型应用程序、 可大规模扩展的数据资料库, 亦或是一次构建而成但会频繁部署的并在物理、 虚拟和云
2014-07-30 23:36:03 4166
原创 Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解
上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数。函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #include 定义函数 FILE * fopen(const char * path,const char *
2014-07-29 22:22:04 2904
原创 Unix/Linux环境C编程入门教程(40) 初识文件操作
1.函数介绍 close(关闭文件) 相关函数 open,fcntl,shutdown,unlink,fclose 表头文件 #include 定义函数 int close(int fd); 函数说明 当使用完文件后若已不再需
2014-07-28 23:44:18 2474
原创 Unix/Linux环境C编程入门教程(39) shell命令之系统管理
df命令用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况。命令的使用格式如下:df [选项]常用参数及含义如下表所示。df -a:显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统。df -h:以容易理解的格式输出文件系统大小,例如124KB、345MB、46GB。df -i:显示i节点信息,而不是磁盘块。df -t:显示各指定类型的文件系
2014-07-27 18:38:17 1968
原创 Linux系统编程(24)——信号的生命周期
信号生命周期为从信号发送到信号处理函数的执行完毕。对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生;信号在进程中注册完毕;信号在进程中的注销完毕;信号处理函数执行完毕。相邻两个事件的时间间隔构成信号生命周期的一个阶段。下面阐述四个事件的实际意义:1、信号"诞生"。信号的诞生指的是触发信号的事件发生(如检测到硬件异
2014-07-26 11:11:29 2900
原创 Linux系统编程(23)——信号的阻塞
实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示可以看作是这样的: 每个信号都有两个标志位分别表示阻
2014-07-26 11:10:50 2267
原创 Linux系统编程(18)——正则表达式实用举例
匹配特定字符串:只能输入长度为3的字符:"^.{3}$"。只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
2014-07-26 11:08:43 2183
原创 Linux系统编程(22)——响应信号
进程对信号的响应进程可以通过三种方式来响应一个信号:(1)忽略信号,即对信号不做任何处理,其中,有两个信号不能忽略:SIGKILL及SIGSTOP;(2)捕捉信号。定义信号处理函数,当信号发生时,执行相应的处理函数;(3)执行缺省操作,Linux对每种信号都规定了默认操作。注意,进程对实时信号的缺省反应是进程终止。Linux究竟采用上述三种方式的哪一个来响应信号,取决于传递给相应API函数的参数。
2014-07-26 11:07:37 2284
原创 Linux系统编程(21)——信号的产生
1、通过终端按键产生信号通过上一篇我们知道了SIGINT的默认处理动作是终止进程,SIGQUIT的默认处理动作是终止进程并且Core Dump,现在我们来验证一下。 首先解释什么是Core Dump。当一个进程要异常终止时,可以选择把进程的用户空间内存数据全部保存到磁盘上,文件名通常是core,这叫做Core Dump。进程异常终止通常是因为有Bug,比如非法内存访问导致段错误,事后可以用调试器检
2014-07-26 11:07:18 2158
原创 Linux系统编程(20)——信号基本概念
信号及信号来源信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附
2014-07-26 11:07:03 2006
原创 Linux系统编程(19)——正则表达式在sed和awk中的使用
sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出。sed和vi都源于早期UNIX的ed工具,所以很多sed命令和vi的末行命令是相同的。 sed命令行的基本格式为 sed option 'script' file1 file2 ...sed option -
2014-07-26 11:06:29 1840
原创 Linux系统编程(17)——正则表达式进阶
C的变量和Shell脚本变量的定义和使用方法很不相同,表达能力也不相同,C的变量有各种类型,而Shell脚本变量都是字符串。同样道理,各种工具和编程语言所使用的正则表达式规范的语法并不相同,表达能力也各不相同,有的正则表达式规范引入很多扩展,能表达更复杂的模式,但各种正则表达式规范的基本概念都是相通的。如果要用grep查找一个模式,如何表示这个模式,这一类字符串,而不是一个特定的字符串呢?从这两个
2014-07-26 11:05:42 1931
原创 Linux系统编程(16)——正则表达式入门
字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。字符串是0个或更多个字符的序列。文本也就是文字,字符串。说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则
2014-07-26 11:02:51 1959
原创 Linux系统编程(15)——shell脚本语法
Shell字符串字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。单引号 str='this is a string'单引号字符串的限制:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;单引号字串中不能出现单引号(对单引号使用转义符后也不行)。双引号your_nam
2014-07-25 23:37:09 2157
原创 Linux系统编程(14)——shell常用命令
1. ls命令 ls命令是列出目录内容(ListDirectory Contents)的意思。运行它就是列出文件夹里的内容,可能是文件也可能是文件夹。 “ls -l”命令已详情模式(longlisting fashion)列出文件夹的内容。 “ls -a”命令会列出文件夹里的所有内容,包括以”.”开头的隐藏文件。注意:在Linux中,文件以“.”开头的就是隐藏文件,并且每个文件,文件夹,设备或者命
2014-07-25 23:34:18 1929
原创 Linux系统编程(13)——Shell的基本语法
按照惯例,Shell变量由全大写字母加下划线组成,有两种类型的Shell变量:环境变量和本地变量。 环境变量:环境变量可以从父进程传给子进程,因此Shell进程的环境变量可以从当前Shell进程传给fork出来的子进程。用printenv命令可以显示当前Shell进程的环境变量。 本地变量只存在于当前Shell进程,用set命令可以显示当前Shell进程中定义的所有变量(包括本地变量和环境变量)和
2014-07-25 23:32:52 1836
原创 Linux系统编程(12)——shell基础
Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要
2014-07-25 23:31:49 1939 1
原创 Linux系统编程(11)——进程间通信之有名管道
Linux系统编程(11)——进程实例 管道应用的一个重大限制是它没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道(named pipe或FIFO)提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程
2014-07-25 23:31:25 1920
原创 LLinux系统编程(10)——进程间通信之管道
管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别。有名管道叫named pipe或者FIFO(先进先出)。 管道具有以下特点:1、管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;2、只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);3、
2014-07-25 23:30:48 1896
原创 Linux系统编程(9)—— 进程之进程控制函数exec系列函数
在Linux中,并不存在exec()函数,exec指的是一组函数,一共有6个,分别是:#include extern char **environ;int execl(const char *path, const char*arg, ...);int execlp(const char *file, const char*arg, ...);int execle(const char *path
2014-07-25 23:29:25 2338
原创 Linux系统编程(8)—— 进程之进程控制函数fork
fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。 函数原型#include#include pi
2014-07-25 23:28:53 1889
原创 Linux系统编程(7)—— 进程之进程概述
我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。现在我们全面了解一下其中都有哪些信息。 进程id。系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负整数。进程的状态,有运行、挂起、停止、僵尸等状态。进程切换时需要保存和恢复的一些CPU寄存器。描述虚拟地址空间的信息。描述控制终端的信息。当
2014-07-24 14:58:49 2161
原创 Linux系统编程(6)——文件系统
计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自
2014-07-24 14:56:24 1961
原创 Linux系统编程(5)——文件与IO之mmap函数
mmap系统调用它本身提供了不同于一般对普通文件的访问方式,进程可以像读写内存一样对普通文件的操作。而Posix或系统V的共享内存IPC则纯粹用于共享目的,mmap()实现共享内存也是其主要应用之一。mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。我们的程序中大量
2014-07-24 14:52:54 2059
原创 Linux系统编程(4)——文件与IO之ioctl函数
ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的参数个数如下:int ioctl(int fd, int cmd, …);其中fd就是用户程序打开设备时使用open函数返回的文件标示符,cmd就是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,有或没有是和cmd
2014-07-24 14:52:31 2873
原创 Linux系统编程(3)——文件与IO之fcntl函数
linux文件I/O用:open、read、write、lseek以及close函数实现了文件的打开、读写等基本操作。fcntl函数可以根据文件描述词来操作文件。 用法:int fcntl(int fd, int cmd);int fcntl(int fd, int cmd, long arg);int fcntl(int fd, int cmd, struct flock*lock); 参数:
2014-07-24 14:52:00 1870
原创 Linux系统编程(2)——文件与IO之系统调用与文件IO操作
系统调用是指操作系统提供给用户程序的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得得操作系统内核提供的特殊服务。在linux中用户程序不能直接访部内核提供的服务。为了更好的保护内核空间,将程序的运行空间分为内核空间和用户空间,他们运行在不同的级上,在逻辑上是相互隔离的。在linux中用户编程接口(API)遵循了在UNIX中最流行的应用编程界面标准——POSIX标准。这些系统调用编程接口主
2014-07-24 14:03:13 1987
原创 Linux系统编程(1)——文件与I/O之C标准I/O函数与系统调用I/O
Linux系统的I/O也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于Linux平台。而标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性。两者一个显著的不同点在于,标准I/O默认采用了缓冲机制,比如调用fopen函数,不仅打开一个文件,而且建立了一个缓冲区(读写模式下将建立两个缓冲区),还创建了一个包含
2014-07-24 14:00:45 4575
原创 C语言的本质(38)——makefile之变量
我们详细看看Makefile中关于变量的语法规则。先看一个简单的例子:foo = $(bar) bar = Huh? all: @echo$(foo)我们执行make将会打出Huh?。当make读到foo = $(bar)时,确定foo的值是$(bar),但并不立即展开$(bar),然后读到bar = Huh?,确定bar的值是Huh?,然后在执行规则all:的命令列表时才需要展开$(f
2014-07-24 13:59:08 1926
原创 C语言的本质(37)——makefile之隐含规则和模式规则
Makefile有很多灵活的写法,可以写得更简洁,同时减少出错的可能。本节我们来看看这样一个例子还有哪些改进的余地。 一个目标依赖的所有条件不一定非得写在一条规则中,也可以拆开写,例如: main.o: main.h stack.h maze.h main.o: main.c gcc-c main.c就相当于: main.o: main.c main.h stack.h maze.
2014-07-24 13:57:58 2761
原创 C语言的本质(36)——makefile基础
除了Hello World这种极简单的程序之外,一般的程序都是由多个源文件编译链接而成的,这些源文件的处理步骤通常用Makefile来管理。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令C语言首先要把源文件编
2014-07-24 13:57:12 1961
原创 C语言的本质(35)——共享库
库用于将相似函数打包在一个单元中。然后这些单元就可为其他开发人员所共享,并因此有了模块化编程这种说法— 即,从模块中构建程序。Linux支持两种类型的库,每一种库都有各自的优缺点。静态库包含在编译时静态绑定到一个程序的函数。动态库则不同,它是在加载应用程序时被加载的,而且它与应用程序是在运行时绑定的。 使用共享库的方法有两种:您既可以在运行时动态链接库,也可以动态加载库并在程序控制之下使用它们。本
2014-07-24 13:31:21 1915
原创 C语言的本质(34)——静态库
库是一种软件组件技术,库里面封装了数据和函数。库的使用可以使程序模块化。Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件)。Linux通常把库文件存放在/usr/lib或/lib目录下。Linux库文件名由:前缀lib、库名和后缀3部分组成,其中动态链接库以.so最为后缀,静态链接库通常以.a作为后缀。在程序中使用使用静态库和动态库时,他们载入的顺序是不同的。静态库的代码
2014-07-24 13:29:57 1631
原创 C语言的本质(33)——GCC编译器入门
GCC(GNU CompilerCollection,GNU编译器套装),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统采纳为标准的编译器,GCC同样适用于微软的Windows。GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。GCC是Linux平台下
2014-07-24 13:28:07 1924
原创 C语言的本质(32)——C语言与汇编之C语言内联汇编
用C写程序比直接用汇编写程序更简洁,可读性更好,但效率可能不如汇编程序,因为C程序毕竟要经由编译器生成汇编代码,尽管现代编译器的优化已经做得很好了,但还是不如手写的汇编代码。另外,有些平台相关的指令必须手写,在C语言中没有等价的语法,因为C语言的语法和概念是对各种平台的抽象,而各种平台特有的一些东西就不会在C语言中出现了,例如x86是端口I/O,而C语言就没有这个概念,所以in/out指令必须用汇
2014-07-24 13:26:58 2746
原创 C语言的本质(31)——C语言与汇编之函数调用的本质
我们一段代码来研究函数调用的过程。首先我们写一段简单的小程序: int sum(int c, int d){ inte = c + d; returne;} int func(int a, int b){ returnsum(a, b);} int main(void){ func(2,3); return0;} 通
2014-07-24 13:22:05 1847 1
原创 Unix/Linux环境C编程入门教程(33) 命令和鼠标管理用户和组
Linux是一个多用户、多任务的实时操作系统,允许多人同时访问计算机, 并同时运行多个任务。UNIX系统具有稳定、高效、安全、方便、功能强大等诸多优点,自20世纪70年代开始便运行在许多大型和小型计算机上。 1.用户管理用户是Linux系统工作中重要的一环,用户管理包括用户与组账号的管理。账号管理是指账号的新增、删除和修改、账号规划以及权限的授予等问题。在Linux系统中,不论是由
2014-07-23 18:08:38 1375
VMware-workstation-full-12.5.0-4352439完美破解版.exe
2016-10-11
codeblocks-16.01mingw_fortran-setup.exe下载
2016-10-10
Java语言程序设计(基础篇)(原书第10版)
2016-09-29
20150329C定义变量->源代码
2016-09-08
20150329C补码->源代码
2016-09-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人