导航

Linux 读书总结-----文件

Posted on 2012-02-18 18:37  网名还没想好  阅读(329)  评论(0编辑  收藏  举报

1,inode中保存哟普文件内容的块号码,Linux内核进行读写操作时,会根据inode中的盘块号码来操作相应的盘块,完成对文件的读写。mv命令用于移动一个文件,即使要移动的文件很大,其移动速度也很快,原因是mv命令没有移动文件内容而是改变了文件的目录项。该命令在新的目录下创建一个新的目录项,并将其指向原来的文件即可。

2,Linux环境使用Link函数创建一个硬链接,其函数原型:int link(const char *path1,const char*path2),第一个参数是现有文件名,第二个参数是新的目录项。Linux文件系统不允许普通用户创建一个链接到目录的硬链接,因为这样可能会导致文件系统中出现回路,根用户可以创建到目录的链接但应该杜绝出现回路的情况。

3,硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中 的物理索引( inode)。当移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问 原始文件的权限,也不会显示原始文件的位置。如果您删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。(每添加一个硬链接 计数器+1,查处一个硬链接,计数器-1,当计数器为0时,文件即被删除)

4,符号链接是一个指针,指向文件在文件系统中的位置。符号链接可以跨 文件系统,甚至可以指向远程文件系统中的文件。符号链接只是指明了原始文件的位置,用户需要对原始文件的位置有访问权限才可以使用链接。如果原始文件被删 除,所有指向它的符号链接也就都被破坏了。它们会指向文件系统中并不存在的一个位置。(删除符号链接并不会删除原文件)

5,stat函数可以得到目录文件的转台信息,其权限位同样存储在st_mode成员变量中。拥有对目录的读权限可以列出该目录中的目录项;拥有对该目录的写权限可以在该目录中创建新的文件;拥有对该目录的执行权限可以穿过该目录,从而大到该目录的子目录。也就是说如果用户提供一个路径,那么对于该路径的每一个目录,该用户都必须拥有执行权限才可以保证该路径是可用的。此点往往被忽略,事实上每一个目录都应当具有执行权限。

6,目录是一种特殊的文件,因此可以像操作文件一样操作目录。目录同样可以被打开,读写和定位。用户虽然可以在目录中删除或创建文件,但是不能够对目录进行写操作。目录的写操作完全是由内核代理完成的,因此Linux环境下不提供写目录的函数接口。

7,子进程改变工作目录并不会影响父进程。如果cd命令实现为一个程序时,而父进程丝毫不受影响。此时cd命令就不起作用。所以,Linux系统中并没有将cd命令实现为一个独立的程序,而是实现在shell程序里。所以不能在程序里用system("cd /usr")之类的系统调用。

8,/proc目录下的文件是系统中运行进程的映像。因此这些文件只存储在内存之中。proc文件系统的设计意图在于为用户提供一组访问进程内核数据的接口。proc文件系统是一个伪文件系统,它只存在于内存当中,用ls -l命令查看其文件详情发现多数文件的大小为0!。proc文件系统不是普通意义上的文件系统,它既是一个到运行的进程地址空间的访问接口,同时又是一个访问内核数据的接口。用户和应用程序可以通过Linux系统调用(如open(),read(),write(),ioctl()等函数)访问proc文件系统中的文件,以取得相应的信息。例如常用的ps程序正是利用/proc获取进程状态。proc文件系统的路径为/proc,用户可以使用ls命令查看该目录下的文件,其中一部文件全是以数字为名的子目录,这个数字就是相关进程的进程ID。而这些目录里包含着记录运行中进程的信息。在/proc文件里有“.”文件,没有“..”文件,因为proc没有父目录

9,fclose函数关闭文件时,该函数会将保存在内存中未来得及写回到磁盘的文件内容写回到磁盘上。了解这一点很重要,如果没有调用fclose函数,就必须等待内存中缓冲区被填满,由系统将其内容写回到磁盘上去。对于fclose函数是否需要检查返回值的问题困扰着许多程序员。虽然严格地说应该检查所有的系统调用的返回值,并且进行错误处理,但对于fclose函数出错的几率很小,几乎为0.但如果去关闭一个网络环境中的远程文件,fclose函数就有可能出错。由于fclose函数在关闭文件时会将缓冲区的内容写回到磁盘上,因此fclose函数实际是进行了一个写操作。在网络环境中,文件的内容是要通过网络传输到目的主机上并写入磁盘上的。在这个传输过程中,如果网络链接出现问题或者传输数据出错,就会导致文件内容写入失败。这时fclose函数就会出错。由此可知,如果在本地关闭一个文件可以不用检查返回值;如果在网络环境中关闭一个文件,检查fclose函数的返回值是有必要的