- 博客(17)
- 资源 (6)
- 收藏
- 关注
原创 一份简单的代码演示缓冲区溢出的危害
最近学习到《深入理解计算机系统》这边书的3.12节的缓冲区溢出,于是写了个简单的测试代码演示了一下通过缓冲区溢出是如何神不知鬼不觉的运行一段代码的。先上代码运行后再分析:#include void hit(){ unsigned char buff[ 100 ] = { 0,0,0,0, //返回地址 'B','O','M','B','\0', 0x83,0xc4,0x80
2014-01-19 14:08:07 2780
原创 C语言左值和右值,以及操作符属性总结
《C和指针》这本书上讲到左值和右值,概念有点含糊据我自己的理解:左值:标识的应该是个存储位置,内存中的位置,左值可以是个变量名,或者是个表达式,但表达式必须表示的是个内存位置右值:就是个值,变量的值,表达式的值操作符的属性有3个因素:操作符的优先级,操作符的结合性,操作符是否控制执行顺序。操作符的优先级:决定含有多个操作符的表达式的求值顺序,每个操作的优先级不同操作符的结合
2013-08-21 13:48:04 8219
原创 读书方法论:经验的哲学观
最近一直在思考经验,什么是经验?摘自百度百科的经验:经验,在哲学上指人们在同客观事物直接接触的过程中通过感觉器官获得的关于客观事物的现象和外部联系的认识。辩证唯物主义认为,经验是在社会实践中产生的,是客观事物在人们头脑中的反映,是认识的开端。但经验有待于深化,有待上升到理论。经验的动态观念是要同客观事物的直接接触,经验本身是接触的过程中获得的对事物的认识,根据这个概念,经验是个能动的操
2013-08-14 15:59:50 1000
原创 shell命令的执行顺序问题·拓扑排序的扩展
shell命令操作文件时有些特殊的顺序问题:比如:1. 管理员修改用户的问题:useroldnewu1200300u2300400u1用户要从原先的uid:200改为uid:300,要将文件系统内所有属于200的文件全部改为300u1改为300后与u2用户相同,就造成冲突,u2却要从
2013-08-10 16:57:35 1094
原创 fopen函数的type字段
标准库中打开文件函数的原型:#include FILE *fopen(const char *restrict pathname, const char *restrict type);FIEL *freopen(const char *restrict pathname, const char *restrict type, FILE *restrict fp);FILE *fd
2013-08-10 13:44:38 3049
原创 shell脚本实现查找文件夹下重复的文件,并提供删除功能
Windows下有软件FindDupFile,可以搜索指定目录及其下子目录,列出所有内容完全相同的文件(文件名可能不同),然后由用户选择删除重复的文件。然而shell脚本却可以使用几行的命令完成与此相同的工作,借助windows下的shell脚本工具Cygwin,可以实现扫描Windows下的目录,原理简述如下:1.首先借助find命令扫描文件夹下类型为普通文件的所有文件,find命令的输
2013-07-31 22:35:18 7300
原创 解决C语言自加的问题:(a++)*(++a)*(a++)*(++a);
void main(){ int a=5; int b; b = (a++)*(a++); printf("%d\n",b);}面试时的这个题目:这无疑就是在考察自加的问题,类似的问题还有许多:(a++)*(a++)*(++a);(a++)*(++a)*(a++);(a++)*(++a)*(a++)*(++a);(a++)*(a++)+(++a
2013-07-30 21:23:07 6320 1
原创 最小-最大堆的实现
最小-最大堆的实现:/*最小最大堆的性质:1. 对于在偶数深度上的任意节点X,存储在X上的关键字小于它的父亲但是大于它的祖父2. 对于在奇数深度上的任意节点X,存储在X上的关键字大于它的父亲但是小于它的祖父从其中可以推理出:1.任意节点X,其关键字的值必定在它的父亲和其祖父之间,也就是说X所在的层上所有关键字 的值必定处于它的父亲层和它的祖父层之间2.所有偶数层从
2013-01-29 14:57:56 4828 2
原创 用户级线程和内核级线程
根据在用户空间还是在核心实现多线程机制,线程又被分为用户级线程(User Level Thread)和内核级线程(Kernel Level Thread)。 有关线程的所有管理工作都有在用户级实现的线程库来支持。用户级线程库是用于用户级线程管理的例程包,支持线程的创建、终止,以及调度线程的执行并保存和恢复线程的上下文,这些操作都在用户空间运行,无需内核的支持,所以用户级线程的创建和管
2012-10-10 10:43:33 3455
原创 unix环境编程·信号特性
1. 启动一个程序对信号的影响执行一个程序时候,信号状态是默认或忽略的则exec时不改变动作,若在exec前捕获了一个信号,那么exec时将还原此信号为默认动作,信号捕获函数的地址在新程序中已无意义。例如:signal(SIGINT,SIG_IGN);execlp("sol",NULL);在shell内部编译此代码运行时,会启动sol游戏,但在shell中按下ctrl+c无法使游戏中断,因为S
2012-09-19 17:46:07 580
原创 针对unix环境编程的一些提问!
1. 为什么会把文件的权限管理和在程序中进行权限管理分开。一个用户或root安装了一套软件,那么管理员就可以直接更改文件系统的权限位以决定其他用户是否可以执行我安装的软件,而不是让软件启动后其自身再判断当前用户是否可以执行此软件,这就给root用户管理所安装软件的执行功能,而一旦软件安装完成,软件的执行文件将不可更改,那么要更改软件代码来判断权限的功能将是不可行的。2. 进程组的作用?
2012-09-13 17:34:52 681
原创 《unix环境编程》解释器文件
书上介绍的,是否一定需要解释器文件,说的很好。解释器确实使用户得到效率方面的好处,其代价是内核的额外开销,因为识别解释器文件的是内核。解释器文件的必要性:1. 有些程序是用脚本编写的,解释器文件可以将这一事实隐藏起来,也就是说解释器文件本身是个程序,可以用exec装入执行。2. 解释器脚本在效率方面也提供了好处。例如一个awk脚本,将其包装在shell脚本中:awk 'BEGI
2012-09-10 14:54:13 2299
原创 《unix环境编程》笔记-文件访问安全
文件的设置用户ID位和设置组ID位,会使进程拥有某个用户的权限来进行执行,这给系统造成很多安全性的考虑,但设置这两个位也是必须的,可以使某些进程暂时拥有其他用户的权限,执行一些操作。设置用户ID位和设置组ID位会使文件拥有特殊权限,因此某些操作会强制关闭这两个位。1. 非超级用户特权的进程对一个可写的文件写操作后,则设置用户ID位和设置组ID位被自动清除。使不怀好意的用户丢失对此文件的特殊
2012-08-23 15:08:26 493
原创 《unix环境编程》笔记-文件访问权限
文件访问权限是多用户系统的复杂机制,如何实现自己的文件不让其他用户访问,如何实现代替管理员用户实现对无权限的文件进行访问,有些文件夹不能打开是什么原因。与每个文件相关的东西,目录看做是目录文件:每个文件都记录所属的文件类型(普通文件、目录文件、块特殊文件、字符特殊文件、FIFO、套接字、符号链接)每个文件都有所属的用户和组,分别使用用户ID和组ID表示,指明文件所属的用户。每个文件
2012-08-21 21:24:06 823
原创 《unix环境编程》笔记-文件IO
1. lseek函数返回的新的文件偏移量通常文件的当前文件偏移量是个非负整数,但是某些设备也可能允许负的偏移量,所以在笔记lseek的返回值时,应该测试其是否等于-1,不判断是否小于02. IO的效率在BUFFSIZE=4096时效率最高3. ./a.out 5 5子句54. fcntl函数在修改文件描述符标志或文件状态标志时,先要取得文件标志,然后修改,然后再设置新标志,
2012-08-20 09:58:45 588
原创 文件IO的原子操作
设计多个进程共同操作一个文件的,就需要原子的操作下面几个问题:1.添加至一个文件多个进程都要添加数据到一个文件的尾端if(lseek(fd,0,SEEK_END)>=0){ write(fd,buff,100);}对单个进程而言,这个程序能正常工作,若多个进程同时调用,则会出现问题。每个进程都有它自己的文件表项,但共享同一个i节点。假定A进程调用lseek,它
2012-08-17 11:18:45 2209
200个C程序
2013-08-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人