摘要: 僵尸进程:在子进程未退出的情况下,父进程退出,子进程被init进程接管,但是子进程将不会正常退出,退出后也不会被收回该进程的资源,所以这种情况应该被避免,否则数量多了以后系统资源将被消耗完.为了避免这种情况可以是用vfork函数进行子进程的派生,或者在父进程中使用一下函数来等待子进程的退出: 头文件 阅读全文
posted @ 2016-04-17 11:35 叫我大哥哥 阅读(609) 评论(0) 推荐(0) 编辑
摘要: 通过Linux启动过程可以得知,所有进程都是init进程直接或者间接的fork出来的. 首先咱们来看看怎么创建子进程: 头文件 #include <unistd.h> int fork(void); //创建一个子进程(开辟和父进程相同空间)返回值:-1失败,成功返回创建的子进程的Id int vf 阅读全文
posted @ 2016-04-17 10:54 叫我大哥哥 阅读(3400) 评论(0) 推荐(0) 编辑
摘要: 对于文件的读写操作函数在执行的空间来分,可以分为内核IO(主要在内核中运行)和标准IO(主要在用户空间中运行). 内核IO需要自己创建和管理缓存,而标准IO是自动分类缓存,一般来说,内核IO的效率高于标准IO,但是差距不是很大,考虑移植性,还是建议使用标准IO(只要是支持标准C语言就支持标准IO). 阅读全文
posted @ 2016-04-16 21:26 叫我大哥哥 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 使用printf函数的时候不知道有没有遇到这样一个问题,程序本应该输出的内容并没有输出,当程序执行结束以后那些输出都输出来了,是不是感觉很奇怪. 其实这是缓存搞的鬼!根据缓存的不同,读写函数分为三类: 一,行缓存函数 当缓存中有换行符或者刷新缓存或者缓存满了以后才会调用系统函数进行输出. 行缓存函数 阅读全文
posted @ 2016-04-16 21:04 叫我大哥哥 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 在Linux环境下使用C语言IO编程的时候,创建文件经常还要给文件赋权限.比如我们赋予读写权限0666,可是创建了文件以后权限却是0664,非本用户组的成员没有写权限,或者创建时候赋予的权限是0664,创建文件以后变成了0662.是不是很奇怪! Linux里面有一个umask(用户权限掩码),这个用 阅读全文
posted @ 2016-04-16 20:31 叫我大哥哥 阅读(276) 评论(0) 推荐(0) 编辑
摘要: C语言是面向过程的语言,面向过程语言对于大型工程来说比较吃力,编写和维护都比较麻烦.但是所有操作系统却都是使用C语言编写的,这好像有些不对! 其实C语言也可以用面向对象的思想来编写代码的.最像类的应该就是C语言的结构体了,那么问题又来了,结构体只能存变量,面向对象中函数是不可缺少的.结构体中无法存储 阅读全文
posted @ 2016-04-15 11:02 叫我大哥哥 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 位操作均需以二进制方式进行(进制转换烂熟于心的请忽略) int a=ox0; 按位取反 ~a=oxffff; 左移 << 相当于*2(*10(二进制))x<<i 相当于x*2^i (*10^i(二进制)) 右移 >> 相当于/2(/10(二进制))x>>i 相当于x/2^i (/10^i(二进制)) 阅读全文
posted @ 2016-04-15 10:40 叫我大哥哥 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 在Linux kernel的代码中,宏定义使用的频率非常的高,宏定义有很多好处,提高程序的可读性,可扩展性,方便修改代码. 宏定义名通常大写,大致分为 一,普通常量 #define SIZE 1 这个是简单的把难记的常量取一个好记又表示作用的名字 二,表示字符串 #define STR(x) #x 阅读全文
posted @ 2016-04-15 10:34 叫我大哥哥 阅读(271) 评论(0) 推荐(0) 编辑
摘要: gcc -v 查看安装的gcc属性gcc -o 输出文件名 源文件名 //编译源文件./输出文件名 //执行gcc -v -o 输出文件名 源文件名 //输出gcc编译源文件所做的工作编译过程:gcc -S 调用编译器编译 .c文件 生成 .s文件 //先进行gcc -E 将.c文件 翻译成 .i文 阅读全文
posted @ 2016-04-15 09:59 叫我大哥哥 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 数组的定义: 数组名=(元素1 元素2 元素n) # 一对括号表示是数组,数组元素用“空格”符号分割开来。 如:myarray=(1 3 5 7 9) # 注意定义的方法,小括号、逗号。 定义一个数组: myarray=(1 2 3 4 5) 读取数组的某一个元素 : echo ${myarray[ 阅读全文
posted @ 2016-04-14 17:13 叫我大哥哥 阅读(181) 评论(0) 推荐(0) 编辑