open系统调用 #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> int open(const char *path,int oflags); int open(const char *path,int oflags, mode_t mode); 简单的说,open建立了一条到文件或设备的访问路径,如果调用成功,它将返回一个可以被read,write和其他系统调用使用的文件描述符。 --------------------------------------------------------------------------------------------------------------------------------------- oflags 参数用于指定打开文件所采取的动作。它是通过必需文件访问模式与其他可选模式相结合的方式来指定的。 必需文件访问模式: O_RDONLY 以只读方式打开 O_WRONLY 继续阅读 >>


杜肖孟 16/07/25 11:38:50
1.1 目录   文件,除了本身的内容外,它还会有一个名字和一些属性,包括文件的创建/修改日期和它的访问权限,这些属性被保存在inode节点中,它是文件系统中的一个特殊的数据块,它同时还包含文件的长度和文件在磁盘上的存储位置。系统使用的是文件的inode编号,为文件命名仅仅是为了便于人们使用。   目录是用于保存其他文件的名字和节点号的文件。目录文件中的每个数据项都是指向某个文件节点的链接,删除文件名就等于删除与之对应的链接。删除一个文件时,实质上是删除了该文件对应的目录项,同时指向该文件的链接数减一,该文件中的数据块可能仍然能够通过其他指向同一文件的链接访问到。   文件被安排在目录中,目录中还可能还有子目录,这就构成了我们熟悉的文件系统层次结构。根目录(/)位于目录层次的最顶端,根目录中通常包含用于存放系统程序的 /bin,用于存放系统配置文件的 /etc,存放系统函数库的 /lib 等子目录。 ------------------------------------------------------------------------------- 继续阅读 >>


杜肖孟 16/07/25 09:55:39
本节为大家介绍我了解的 make 是如何工作的=_= 在默认的方式下,也就是我们只输入make命令。那么, 1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 2、如果找到,它会找文件中的第一个目标文件(target),在上节的例子中,他会找到“myapp”这个文件,并把这个文件作为最终的目标文件。 3、如果myapp文件不存在,或是myapp所依赖的后面的 .o 文件的文件修改时间要比myapp这个文件新,那么,他就会执行后面所定义的命令来生成myapp这个文件。 4、如果myapp所依赖的.o文件也不存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这有点像一个堆栈的过程) 5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件myapp了。       这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。在找寻 继续阅读 >>


杜肖孟 16/07/15 15:59:17
make命令和makefile文件的结合提供了一个在项目管理领域十分强大的工具。 makefile文件由一组依赖关系和规则构成。 makefile的规则:先写目标的名称,然后紧跟这一个冒号,接着是空格或者制表符tab,最后是用空格或者制表符tab隔开的文件列表(这些文件用于创建生成目标文件)。 target ... : prerequisites ... command ... ... 目标文件可以是中间目标文件,也可以是可执行文件,还可以是标签、伪目标。 command也就是make需要执行的命令(任意的shell命令)。 prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。 例如:编写文件Makefile1   myapp: main.o 2.o 3.o gcc -o myapp main.o 2.o 3.o main.o:main.c a.h gcc -c main.c 继续阅读 >>


杜肖孟 16/07/15 15:18:15
动态存储方式 所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、 释放形参变量的存储单元。 静态存储方式 所谓静态存储方式是指在程序编译期间分配固定的存储空间的方式。该存储方式通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束。全局变量,静态变量等就属于此类存储方式。 总结 从以上分析可知, 静态存储变量是一直存在的, 而动态存储变量则时而存在时而消失。我们又把这种由于变量存储方式不同而产生的特性称变量的生存期。 生存期表示了变量存在的时间。 生存期和作用域是从时间和空间这两个不同的角度来描述变量的特性,这两者既有联系,又有区别。 一个变量究竟属于哪一种存储方式, 并不能仅从其作 继续阅读 >>


杜肖孟 16/07/09 19:30:43
用途: (1)限制变量的作用域     (2)设置变量的存储域 一个进程在内存中的布局如图所示: .text段保存进程所执行的程序二进制文件,.data段保存进程所有的已初始化的全局变量,.bss段保存进程未初始化的全局变量(其他段中还有很多乱七八糟的段,暂且不表)。在进程的整个生命周期中,.data段和.bss段内的数据时跟整个进程同生共死的,也就是在进程结束之后这些数据才会寿终就寝。 static 全局变量与普通的全局变量有什么区别? 两者都是静态存储方式,区别在于非静态全局变量的作用域是整个源程序。当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的,而静态全局变量的作用距局限于一个源文件内,只能为源文件内的函数使用。把普通全局变量改为静态全局变量时改变了它的作用域,限制了它的使用范围。 static 局部变量与普通的局部变量有什么区别? 1)位置:静态局部变量被编译器放在全局存储区.data(注意:不在.bss段内,原因见3)),所以它虽然是局部的,但是在程序的整个生命周期中存在。 2)访问权限:静态局部变量只 继续阅读 >>


杜肖孟 16/07/09 19:02:46