第四讲--Linux 文件系统程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

LINUX操作系统LINUX操作系统十讲LINUX操作系统十讲信息科学与工程学院付冲LINUX操作系统第一讲Linux导论第二讲Linux文件系统与基本指令集第三讲LinuxC程序设计基础第四讲Linux文件系统程序设计第五讲Linux多进程与多线程程序设计第六讲Linux进程间通信程序设计第七讲Linux服务与TCP/IP网络程序设计第八讲LinuxShell程序设计第九讲LinuxGUI程序设计第十讲Linux前沿热点技术导论(集群,虚拟化,存储,安全)Linux操作系统十讲LINUX操作系统第四讲Linux文件系统程序设计LINUX操作系统例1:使用umask例2:使用open和close例3:使用read,write例4:使用fstat例5:使用ftruncate,lseek,fsync例6:用fcntl进行文件锁操作例7:使用dup2重定向stdoutLINUX操作系统例1:使用umask补充知识——Linux文件系统的权限管理(1)查看权限-rw-r--r--1rootroot1408Feb182003install.logrwxr--r--第一组第二组第三组9个字符分为3组,每组以3个字符表示:(a)第一组:文件所有者的权限(b)第二组:文件所属组的权限(c)第三组:既非所有者也非所属组的其他用户的权限LINUX操作系统字符代表的意义:-没有权限r允许读取(read)/列出目录内容w允许写入(write)/添加或删除文件x允许执行(execute)/进入目录举例:(1)drwxr-xr-x(2)–rw-r--r--(3)–rw-------(4)drwx------(5)–rwxr-xr-xLINUX操作系统(2)改变权限系统管理员或文件、目录的所有者可以根据需要改变文件或目录的权限。更改权限指令:chmodLINUX操作系统rwx000——0——没有任何权限001——1——允许执行(x)010——2——允许写入(w)100——4——允许读取(r)011——3——1+2,允许执行及写入101——5——1+4,允许执行及读取110——6——2+4,允许写入及读取111——7——1+2+4,允许执行、写入及读取文件权限的数值表示法:LINUX操作系统文件的权限位定义:0位(最低位):其他用户执行权限位1位:其他用户写权限位2位:其他用户读权限位3位:同组用户执行权限位4位:同组用户写权限位5位:同组用户读权限位6位:文件所有者执行权限位7位:文件所有者写权限位8位:文件所有者读权限位LINUX操作系统范例:设一个文件原有的状态为:-rw-r--r--1rootroot1408Feb182003myfile指令:chmod754myfile结果:-rwxr-xr--chmod444myfile结果:-r--r--r--chmod755myfile结果:-rwxr-xr-xchmod777myfile结果:-rwxrwxrwxLINUX操作系统(3)默认权限(a)掩码:umask的概念(b)文件权限:666(c)目录权限:777(d)root默认umask=022666-022=644即,文件默认权限:rw-r--r--777-022=755即,目录默认权限:rwxr-xr-xLINUX操作系统(e)普通账号默认umask=002666-002=664即,文件默认权限:rw-rw-r--777-002=775即,目录默认权限:rwxrwxr-x(f)更改umask的值umaskn2n3n4注:umask命令不能永久改变掩码,若需永久改变,可设置在.bash_profile文件中。LINUX操作系统进程的umask进程的umask是新创建的文件、目录应关闭的访问权限位的位掩码。例:0222表示关闭文件主(创建文件的进程的用户)、同组用户、其它用户的写权限。为1的位表示对应权限关闭。LINUX操作系统系统调用umask#includesys/stat.hmode_tumask(mode_tnewmask);功能:修改进程的umask,设置为newmask,并将原来的umask返回。LINUX操作系统例1.使用umask程序名称:newmask.cLINUX操作系统例2:使用open和close使用的系统调用opencreatcloseLINUX操作系统open#includesys/types.h#includesys/stat.h#includefcntl.hintopen(constchar*pathname,intflags);功能:打开文件,将文件控制块调入内存,为文件读写做好准备。参数:pathname:文件路径,含文件名flags:标志LINUX操作系统flags:标志O_RDONLY:只读O_WRONLY:只写O_RDWR:读写O_CREAT:创建O_EXCL:创建时使用,若文件已存在时创建失败O_NOCTTY:不常用,打开终端文件时的选项O_TRUNC:若文件存在,文件长度置0O_APPEND:文件指针初始化为文件末尾O_NONBLOCK:使读操作不阻塞O_SYNC:写操作时不缓冲,直接写入磁盘LINUX操作系统open返回值:成功时返回文件描述符,失败返回-1并设置errno。文件描述符:整数,文件占用的进程打开文件表表目序号。LINUX操作系统creat#includesys/types.h#includesys/stat.h#includefcntl.hintcreat(constchar*pathname,intflags,mode_tmode)功能:创建文件。相当于open(pathname,O_CREAT|O_TRUNC|O_WRONLY,mode);mode:指出文件权限。LINUX操作系统close#includeunist.dintclose(intfd);功能:关闭文件,即将修改过的文件内容、文件控制块内容写回磁盘。LINUX操作系统例2:使用open和close程序名称:fdopen.cLINUX操作系统例3:使用read,write使用的系统调用readwriteLINUX操作系统read#includeunistd.hssize_tread(intfd,constvoid*buf,size_tcount);功能:读文件。buf:读到的文件内容存入buf指向的缓冲区。count:期望读到的字节数。从文件指针指向位置开始读,读操作完成后文件指针后移count个字节。返回值:实际读到的字节数。出错时返回-1,并设置errno。遇到文件末尾返回0。LINUX操作系统write#includeunistd.hssize_twrite(intfd,constvoid*buf,size_tcount);功能:写文件。buf指向位置开始的count个字节写入文件中文件指针指向位置开始处。写操作完成后文件指针后移count个字节。返回值为实际写入文件的字节数。调用失败返回-1,并设置errno。LINUX操作系统例3:使用read,write程序名称:fdread.cLINUX操作系统例4:使用fstat#includesys/stat.h#includeunistd.hintfstat(intfd,structstat*buf);功能:将fd所引用的文件信息,存入buf指向的结构体structstat。LINUX操作系统structstat{dev_tst_dev;/*device*/;ino_tst_ino;/*inode*/mode_tst_mode;/*protection*/nlink_tst_nlink;/*numberofhardlinks*/uid_tst_uid;/*userIDofowner*/gid_tst_gid;/*groupIDofowner*/dev_tst_rdev;/*devicetype(ifinodedevice)*/off_tst_size;/*totalsize,inbytes*/unsignedlongst_blksize;/*blocksizeforfilesystemI/O*/unisgnedlongst_blocks;/*numberofblocksallocated*/time_tst_atime;/*timeoflastaccess:read,write*/time_tst_mtime;/*timeoflastmodification:write*/time_tst_ctime;/*timeoflastchange:changeofpropertyetc.*/}LINUX操作系统例4:使用fstat程序名称:mstst.cLINUX操作系统例5:使用ftruncate,lseek,fsyncftruncate#includeunistd.hintftruncate(intfd,off_tlength);功能:fd引用的文件缩短到length指定的长度。成功时返回0出错时返回-1,并修改errno。LINUX操作系统lseek#includesys/types.h#includeunistd.hoff_tlseek(intfd,off_toffset,intwhence);设置文件指针whence为SEEK_SET,设置文件指针到offset处whence为SEEK_CUR时,设置文件指针到当前位置之后offset字节处whence为SEEK_END时,设置文件指针到文件尾向前offset字节处LINUX操作系统fsync#includeunistd.hintfsync(intfd);功能:将fd代表的文件在缓冲区中的内容写入磁盘。LINUX操作系统例5:使用ftruncate,lseek,fsync程序名称:seek.cLINUX操作系统例6:用fcntl进行文件锁操作#includeunistd.h#includefcntl.hintfcntl(intfd,intcmd);intfcntl(intfd,intcmd,longarg);intfcntl(intfd,intcmd,structflock*lock);功能:改变文件特性。LINUX操作系统cmd为F_SETLK时,给文件上锁,不阻塞。cmd为F_SETLKW时,给文件上锁,阻塞到上锁成功。cmd为F_GETLK时,获得文件上已有的锁。LINUX操作系统structflock的字段:l_type为锁操作的类型:F_RDLCK:上读锁;F_WRLCK:上写锁;F_UNLCK:解锁。l_whence,l_start,l_len设置锁的位置。读锁:也称共享锁,多个进程可同时上读锁,记录上读锁后可以再上读锁,但不能再上写锁。写锁:也称排它锁,只有一个进程可以上写锁,记录上写锁后不能再上其它锁。LINUX操作系统例6:用fcntl进行文件锁操作程序名称:lockit.cLINUX操作系统例7:使用dup2重定向stdout#includeunistd.hintdup2(intoldfd,intnewfd);功能:把oldfd对应的进程打开文件表表目,复制到newfd对应的进程打开文件表表目。LINUX操作系统补充知识:输入/输出(I/O)重定向(redirection)(1)标准输入(stdin):键盘(2)标准输出(stdout):显示器(3)标准错误输出(stderr):显示器(4)重定向的含义语法格式:(1)指令文件功能:从文件输入示例:mailrootmessage.txtLINUX操作系统(2)指令文件功能:输出到文件(覆盖方式)示例:manlsfile.txt(3)指令文件功能:输出到文件(追加方式)示例:catdata.txtfile.txtLINUX操作系统例7:使用dup2重定向stdout程序名称:dup.c

1 / 41
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功