经典linux系统编程(值得收藏)第4章

上传人:fgh****35 文档编号:247436554 上传时间:2024-10-18 格式:PPT 页数:38 大小:1.34MB
返回 下载 相关 举报
经典linux系统编程(值得收藏)第4章_第1页
第1页 / 共38页
经典linux系统编程(值得收藏)第4章_第2页
第2页 / 共38页
经典linux系统编程(值得收藏)第4章_第3页
第3页 / 共38页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,*,第,4,章,文件的操作,本章重点,Linux,系统的文件属性,不带缓存的文件,I/O,操作,基于流的文件,I/O,操作,特殊文件的操作,2,4.1 Linux,系统文件的属性,Linux,系统中,文件的准确定义是不包含有任何其他结构的字符流。,Linux,系统提供的文件系统,是树形层次结构系统。,Linux,支持多种文件系统,最常用的文件系统是,ext2,系统。,Linux,系统的文件属性主要包括文件类型和文件权限两个方面。,注意:,FHS,标准定义了文件系统中每个区域的用途和所需要的最小构成的文件和目录。,3,4.1.1 Linux,文件类型,Linux,下最常见的文件类型有,5,种:普通文件、目录文件、链接文件、管道文件和设备文件。,例,4.1,:,设计一个程序,要求列出当前目录下的文件信息,以及系统“,/dev/sda1”,和“,/dev/lp0”,的文件信息。,编辑源程序代码 :,4,4.1.1 Linux,文件类型,Linux,系统的主要文件类型:,5,4.1.2 Linux,文件权限,对于,Linux,系统中的文件来说,它的权限可以分为,4,种:可读取(,Readable,)、可写入(,Writable,)、可执行(,eXecute,)和无权限,分别用,r,、,w,、,x,和,-,表示。,Linux,系统按文件所有者、文件所有者同组用户和其它用户三类规定不同的文件访问权限。,显示的作为权限的,10,个字符,可分为四部分:,第一位:一般表示文件类型。,第二位到第四位,(,第一组,rwx),:表示文件所有者的访问权限。,第五位到第七位,(,第二组,rwx),:表示文件所有者同组用户的访问权限。,第八位到第十位,(,第三组,rwx),:表示其他用户的访问权限。,6,4.1.2 Linux,文件权限,例,4.2,:,设计一个程序,要求把系统中“,/etc”,目录下的,passwd,文件权限,设置成文件所有者可读可写,所有其他用户为只读权限。,源程序代码:,编译、运行后,使用,ls l,命令查看“,/etc/passwd”,文件的权限,rootlocalhost root#ls -l /etc/passwd,7,4.1.2 Linux,文件权限,例,4.3,:,设计一个程序,要求设置系统文件与目录的权限掩码。,源程序代码 :,注意:运行一次此例的程序后,修改源程序中的掩码后,再次编译运行,文件“,liu1”,和“,liu2”,的权限并不改变。因为如果文件已经存在,,touch,只修改时间标记。如果要再次验证新的掩码,需要再次运行程序前删除原来的文件。,8,4.1.2 Linux,文件权限,chmod,函数说明,mode,参数说明,9,4.1.2 Linux,文件权限,umask,函数说明,思考题:设计一个程序,要求,Linux,系统新建的文件权限 是,0400,。,10,4.1.3 Linux,文件的其他属性,文件还有创建时间,大小等其他的属性。,在,Linux,系统中,定义了,stat,结构体来存放这些信息。,如果要获得文件的其他属性,可以使用,stat,函数或者,fstat,函数。,stat,函数用来判断没有打开的文件,而,fstat,函数用来判断打开的文件。使用较多的属性是,st_mode,,通过此属性可以判断给定的文件是一个普通文件还是其他文件类型。,11,4.1.3 Linux,文件的其他属性,例,4.4,:,设计一个程序,应用系统函数,stat,获取系统中“,/etc”,目录下的,passwd,文件的大小。,源程序代码:,12,4.1.3 Linux,文件的其他属性,stat,函数说明,思考题:,设计一个程序,要求判断“,/etc/passwd”,的文件类型。,使用,st_mode,属性,可以使用几个宏来判断:,S_ISLNK(st_mode),是否是一个连接,,S_ISREG,是否是一个常规文件,S_ISDIR,是否是一个目录,,S_ISCHR,是否是一个字符设备,,S_ISBLK,是否是一个块设备,,S_ISFIFO,是否 是一个,FIFO,文件,,S_ISSOCK,是否是一个,SOCKET,文件。,设计一个程序,要求打开文件“,/etc/passwd”,, 判断它的最后一次访问时间。,13,4.2,不带缓存的文件,I/O,操作,Linux,系统中,基于文件描述符的文件操作主要有:不带缓存的文件,I/O,操作和带缓存的文件流,I/O,操作。,不带缓存的文件,I/O,操作,又称系统调用,I/O,操作,符合,POSIX,标准,设计的程序能在兼容,POSIX,标准的系统间方便地移植。,不带缓存的文件,I/O,操作用到的主要函数:,14,4.2.1,文件的创建,例,4.5,:,设计一个程序,要求在“,/home”,目录下创建一个名称为“,4-5file”,的文件,并且把此文件的权限设置为所有者具有只读权限,最后显示此文件的信息。,源程序代码 :,15,4.2.1,文件的创建,creat,函数说明,思考题:设计一个程序,要求在“,/mnt”,目录下创建一个名称为“,usb”,的文件,编辑、调试成功后,运行两次是否有问题?为什么?,16,4.2.2,文件的打开和关闭,例,4.6,:,设计一个程序,要求在“,/home”,下以可读写方式打开一个名为“,4-6file”,的文件,如果该文件不存在,则创建此文件,如果存在,将文件清空后关闭。,源程序代码:,17,4.2.2,文件的打开和关闭,open,函数说明,18,4.2.2,文件的打开和关闭,close,函数说明,思考题:设计一个程序,要求在“,/mnt”,目录下,打开名称为“,usb”,的文件,如果该文件不存在,则创建此文件,如果存在,将文件清空后关闭。,19,4.2.3,文件的读写操作,文件读写操作中,经常用到的函数是,read,、,write,和,lseek,。,例,4.7,:,设计一个,C,程序,完成文件的复制工作。要求通过使用,read,函数和,write,函数复制“,/etc/passwd”,文件到“,4-7test”,文件中,文件名当程序运行时从键盘键入。,源程序代码 :,20,4.2.3,文件的读写操作,Read,、,write,函数说明,思考题:,设计一个程序,使用,read,函数从源文件读取数据,再用,write,函数写入到目标文件,源文件名和目标文件名都由键盘输入。,设计一个程序,要求在“,/mnt”,目录下,打开名称为“,usb”,的文件,如果该文件不存在,则创建此文件,如果已存在,把字符串“,usb,作为优盘设备文件”写入此文件后关闭。,21,4.2.4,文件上锁,Linux,系统中,给文件上锁主要有建议性锁和强制性锁。给文件加建议性锁的是,flock,函数,给文件加强制性锁的是,fcntl,函数。,一般情况下,系统使用强制性锁,而很少使用建议性锁。当一个文件被上锁后,内核将阻止其他任何文件对其进行读写操作。,例,4.8,:,设计一个程序,要求在“,/home”,下打开一个名为“,4-8file”,的文件,如果该文件不存在,则创建此文件。打开后对其加上强制性的写入锁,然后释放写入锁。,源程序代码 :,22,4.2.4,文件上锁,注意:程序在终端中运行后会暂停,需要按任意健后程序才会继续运行。,23,4.2.4,文件上锁,flock,、,fcntl,函数说明,思考题:设计一个程序,要求在“,/mnt”,目录下,打开名称为“,usb”,的文件,如果该文件不存在,则创建此文件。打开后对其加上强制性的写入锁,然后释放写入锁。,24,4.3,带缓存的流文件,I/O,操作,带缓存的流文件,I/O,操作,是在内存开辟一个“缓存区”,为程序中的每一个文件使用。,内存“缓存区”的大小,影响着实际操作外存的次数,内存“缓存区”越大,则操作外存的次数就少,执行速度就快、效率高。,带缓存的文件,I/O,操作用到的主要函数,25,4.3.1,流文件的打开和关闭,例,4.9,:,设计一个程序,要求用流文件,I/O,操作打开文件“,4-9file”,, 如果该文件不存在,则创建此文件。,源程序代码:,思考题:设计一个程序,要求用带缓存的流文件,I/O,操作,在“,/tmp”,目录下,打开名称为“,tmpfile”,的文件,如果该文件不存在,则创建此文件,如果存在,将文件清空后关闭。,26,4.3.2,流文件的读写操作,例,4.10,:,设计一个程序,要求把键盘上输入的字符写入文件“,4-10file”,, 如果该文件不存在,则创建此文件。,源程序代码:,思考题:,程序运行后,输入的字符如果是半角的中文,文件中能否写入?为什么?,设计一个程序,要求用带缓存的流文件,I/O,操作,利用,fputc,函数把键盘上输入的字符串写入文件“,/tmp/4-10tmp”,, 如果该文件不存在,则创建此文件。,27,4.3.2,流文件的读写操作,例,4.11,:,设计一个程序,要求把键盘上输入的字符写入文件“,4-11file”,, 如果该文件不存在,则创建此文件。,源程序代码:,思考题:,设计一个程序,要求用带缓存的流文件,I/O,操作,把键盘上输入的字符串写入文件“,/tmp/4-11tmp”,, 如果该文件不存在,则创建此文件,多次运行程序多次输入字符串后,文件“,/tmp/4-11tmp”,中只保存最后一次输入的字符串。,设计一个程序,要求用带缓存的流文件,I/O,操作,把文件“,/tmp/4-11tmp”,中的内容读取出来,在终端中打印输出。,28,4.3.1,流文件的打开和关闭,例,4.12,:,设计两个程序,要求一个程序把三个人的姓名和帐号余额信息,通过一次流文件,I/O,操作写入文件“,4-12file”,,另一个格式输出帐号信息,把每个人的帐号和余额一一对应显示输出。,4-12fwrite.c,,,4-12fread.c,程序代码 :,思考题:,完善例,4.12,的程序,使得帐号和余额都可以从键盘输入,余额可以输入小数。,设计一个程序,要求把一个文本文件“,4-12test”,中的数据读出,文本文件“,4-12test”,有两列数据,第一列是帐号,(11,位整数表示,),,第二列是帐号余额,(double,数据类型,),,两列数据间用逗号隔开,按帐号余额从小到大排序后,把排序后的数据写入文本文件“,4-12sort”,,帐号要和余额一一对应。,29,4.3.4,文件的定位,实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。文件定位移动文件内部位置指针的函数主要有三个, 即,rewind,函数、,fseek,函数和,ftell,函数。,例,4.13,:,设计一个程序,要求用,fopen,函数打开系统文件“,/etc/passwd”,,先把位置指针移动到第,10,个字符前,再把位置指针移动到文件尾,最后把位置指针移动到文件头,输出三次定位的文件偏移量的值。,源程序代码:,思考题:设计一个程序,要求从系统文件“,/etc/passwd”,读取偏移量从,100,至,200,之间的字符,写入“,/tmp/pass”,文件。,30,4.4.1,目录文件的操作,目录文件是,Linux,中一种比较特殊的文件,它是,Linux,文件系统结构中骨架,对构成整个树型层次结构的,Linux,文件系统非常重要。,对目录文件的操作可以使用,mkdir,函数、,opendir,函数、,closedir,函数、,readdir,函数和,scandir,函数等。,31,4.4.1,目录文件的操作,例,4.14,:,设计一个程序,要求读取系统目录文件“,/etc/rc.d”,中所有的目录结构。,源程序代码:,思考题:设计一个程序,要求读取“,/etc”,目录下所有的目录结构,并依字母顺序排列。,32,4.4.2,链接文件的操作,Linux,系统中的链接文件,有点类似于,Windows,系统中的“快捷方式”,但并不完全一样。,1.,软链接文件,软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。链接文件甚至可以链接不存在的文件,这就产生一般称之为“断链”的问题,链接文件甚至可以循环链接自己。类似于编程语言中的递归。,33,4.4.2,链接文件的操作,例,4.15,:,设计一个程序,要求为“,/etc/passwd”,文件建立软链接“,4-15link”,,并查看此链接文件和“,/etc/passwd”,文件。,源程序代码 :,思考题:设计一个程序,要求为“,/bin”,目录文件建立软链接为“,bin”,,并查看此链接文件和“,/bin”,目录文件。,34,4.4.2,链接文件的操作,2.,硬链接文件,对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容,这时,系统就“忘记”了它曾经是硬链接文件,而把它当成一个普通文件。,硬链接文件有两个限制:,不允许给目录创建硬链接;,只有在同一文件系统中的文件之间才能创建链接。,35,4.4.2,链接文件的操作,例,4.16,:,设计一个程序,要求为“,/etc/passwd”,文件建立软链接“,4-16link”,,并查看此链接文件和“,/etc/passwd”,文件。,源程序代码:,思考题:设计一个程序,要求为“,/bin/ls”,文件建立硬链接为“,ls”,,并查看此链接文件和“,/bin/ls”,文件。,36,思考与实验,设计一个程序,要求打开文件“,pass”,,如果没有这个文件,新建此文件,权限设置为只有所有者有只读权限。,设计一个程序,要求新建一个文件“,hello”,,利用,write,函数将“,Linux,下,c,软件设计”字符串写入该文件。,设计一个程序,要求利用,read,函数读取系统文件“,/etc/passwd”,,并在终端中显示输出。,37,思考与实验,设计一个程序,要求打开文件“,pass”,,如果没有这个文件,新建此文件;读取系统文件“,/etc/passwd”,,把文件中的内容都写入“,pass”,文件。,设计一个程序,要求将,10,分别以十进制、八进制和十六进制输出。,设计一个程序,要求新建一个目录,预设权限为,-x-x-x-,。,设计一个程序,要求为“,/bin/ls”,文件建立一个软链接“,ls1”,和一个硬链接为“,ls2”,,并查看两个链接文件和“,/bin/ls”,文件。,38,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械制造 > 工业自动化


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!