linux环境高级编程下载,LINUX环境高级编程-第二讲文件.ppt

62e50291a81fc54b507f33cb80033297.gif LINUX环境高级编程-第二讲文件.ppt

(255页)

86129cb2f10f6a694185942e313be290.gif

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

29.9 积分

Linux环境高级编程第二讲 文件的操作第二讲 文件的操作文件I/O(第三章)文件和目录(第四章)第二讲 文件的操作文件I/O(第三章)文件和目录(第四章)文件I/O文件的基本操作(打开、定位、读写、关闭)I/O效率文件共享其他重要I/O函数文件I/O文件的基本操作(打开、定位、读写、关闭)I/O效率文件共享其他重要I/O函数文件操作基本顺序打开 open创建 creat定位 lseek读 read写 write关闭 closeopen函数用于打开或者创建一个文件函数原型#includeint open(const char* pathname, int oflag, ...)参数第一个参数pathname:要打开或者创建的文件名第二个参数oflag:用于指定文件打开模式、标志等信息。open函数第二个参数oflag:Linux头文件已经为文件打开模式、标志等定义了若干的宏oflag需要指定这些宏宏定义在/usr/include/bits/fcntl.h中在该头文件中,只读打开标志被定义为: #define O_RDONLY 00open函数oflag:文件打开模式标志 以下三个标志必须指定一个且只能指定一个O_RDONLY : 只读打开O_WRONLY : 只写打开O_RDWR : 读写打开其他文件标志 下面的标志是可以选择的,可通过C语言的或运算与文件打开标志进行组合 open函数oflag其他文件标志: O_APPEND:每次写的数据都添加到文件尾 O_TRUNC:若此文件存在,并以读写或只写打开,则文件长度为0 O_CREAT:若文件不存在,则创建该文件。此时,open函数需要第三个参数,用于指定该文件的访问权限位(后面描述) O_EXCL:若同时指定了O_CREAT标志,而文件已经存在,则会出错。可用于测试文件是否存在open函数返回值int open(const char* pathname, int oflag, …)返回值:整型数据成功时,返回文件描述符出错时,返回-1open函数返回值int open(const char* pathname, int oflag, …)返回值:整型数据成功时,返回文件描述符出错时,返回-1什么是文件描述符?open函数返回值int open(const char* pathname, int oflag, …)返回值:整型数据成功时,返回文件描述符出错时,返回-1什么是文件描述符?已打开文件的索引open函数返回值int open(const char* pathname, int oflag, …)返回值:整型数据成功时,返回文件描述符出错时,返回-1什么是文件描述符?已打开文件的索引通过索引找到已打开文件文件描述符文件描述符的本质是什么?通过文件描述符怎么样能找到需访问的文件?需要了解进程打开文件时,内核创建或涉及到的一系列数据结构进程打开文件的内核数据结构task_struct.........files.......................files_structfd[0]fd[1]fd[2]fd[3]...........files_structfilef_posf_dentry文件标志............dentryd_inode索引节点号文件各信息inode..............进程打开文件的内核数据结构task_struct.........进程控制块PCB进程打开文件的内核数据结构task_struct.........files.........struct task_struct{ ............. struct files_struct *files; .............};进程打开文件的内核数据结构task_struct.........files...................files_structfiles_struct该结构体包含了:进程已打开文件表进程打开文件的内核数据结构task_struct.........files.......................files_structfd[0]fd[1]fd[2]fd[3]files_struct..............struct file **fd;进程打开文件的内核数据结构task_struct.........files.......................files_structfd[0]fd[1]fd[2]fd[3]...........files_structfile..............文件对象:代表一个已打开的文件进程打开文件的内核数据结构task_struct.........files.......................files_structfd[0]fd[1]fd[2]fd[3]...........files_structfilef_posf_dentry文件标志..............文件偏移量各种文件标志文件相关目录项struct dentry *f_dentry;进程打开文件的内核数据结构task_struct.........files.......................files_structfd[0]fd[1]fd[2]fd[3]...........files_structfilef_posf_dentry文件标志............dentry..............进程打开文件的内核数据结构task_struct.........files.......................files_structfd[0]fd[1]fd[2]fd[3]...........files_structfilef_posf_dentry文件标志............dentryd_inode..............struct inode *d_inode;进程打开文件的内核数据结构task_struct.........files.......................files_structfd[0]fd[1]fd[2]fd[3]...........files_structfilef_posf_dentry文件标志............dentryd_inode索引节点号文件各信息inode..............索引节点文件系统索引节点的信息,存储在磁盘上当需要时,调入内存,填写VFS的索引节点(即inode结构)每个文件都对应了一个索引节点通过索引节点号,可以唯一的标识文件系统中的指定文件索引节点struct inode{ ........................ unsigned long i_。省略部分。ink,为目录时等价于rmdir。225unlink函数程序演示unlink创建临时文件(2.19)能否用unlink实现程序的自我删除226rename函数用于更名文件或目录函数原型int rename(const char *oldname, const char * newname);将原来的文件名oldname,更改为newname成功返回0,出错返回-1227rename函数如果oldname是一个文件而不是目录,那么为该文件更名。如果newname已存在,而且是一个目录,则出错,如果不是目录,则先将该目录项删除,然后将oldname更名为newname如果oldname是一个目录,那么为该目录更名。如果newname已存在,则它必须引用一个目录,而且该目录应当是空目录,此时,内核先将其删除,然后将oldname更名为newname。另外,当为一个目录更名时,newname不能包含oldname作为其路径前缀228rename函数作为一个特例,如果oldname和newname引用同一文件,则函数不做任何更改而成功返回。应对包含两个文件的目录具有写和执行许可权。229硬链接和符号连接link、unlink、remove、rename函数符号连接symlink、readlink函数符号连接符号连接是对一个文件的间接指针。与硬连接不同的是,硬连接文件直接指向文件的i节点,并增加文件的引用计数。但符号连接是一种特殊类型的文件,其文件内容是被连接文件的路径名创建符号连接(2.20)ln -s a.txt syma.txt符号连接对于符号连接的处理,有些系统调用直接处理符号连接文件本身,而有些系统调用则跟踪符号连接文件到其所指向的文件。(如chown、remove、unlink等就直接处理符号连接文件,而大多数系统调用则跟随符号连接,如chmod、open、stat等)硬链接和符号连接link、unlink、remove、rename函数符号连接symlink、readlink函数symlink函数用于创建符号连接函数原型int symlink(const char* actualpath, const char* sympath);该函数创建了一个指向actualpath的新目录项sympath并不要求actualpath已经存在,且actualpath和sympath不一定位于同一文件系统readlink函数用于读符号文件本身的内容函数原型int readlink(const char* pathname, char* buf, int bufsize);成功返回读入buf的字节数,出错返回-1文件和目录ext2文件系统在磁盘的组织stat、fstat、lstat函数文件的基本性质修改文件属性的函数硬链接与符号连接目录操作目录操作mkdir、rmdir函数读目录chdir、fchdir、getcwd函数目录操作mkdir、rmdir函数读目录chdir、fchdir、getcwd函数mkdir函数用于创建目录函数原型int mkdir(const char *pathname, mode_t mode);参数与返回值pathname:目录名mode:指定目录的存取许可权成功返回0,出错返回-1.和..目录项自动创建rmdir函数用于删除空目录函数原型int rmdir(const char *pathname);参数与返回值pathname:目录名成功返回0,出错返回-1目录操作mkdir、rmdir函数读目录chdir、fchdir、getcwd函数读目录的基本操作打开目录(opendir)逐一读出目录项(readdir、rewinddir)关闭目录(closedir)opendir函数用于打开目录函数原型:DIR* opendir(const char* pathname);返回值和参数返回值:返回打开目录的索引结构,出错返回NULLpathname:要打开的目录名readdir函数用于读取目录项函数原型:struct dirent *readdir(DIR *dp);参数与返回值dp:由opendir返回的返回值:dp对应的目录中包含的一个目录项readdir函数dirent结构struct dirent{ ino_t d_ino; //索引节点号 char d_name[NAME_MAX + 1]; //文件名 ................}获得目录下的所有文件DIR *dir;struct dirent *ptr; dir=opendir("/etc/rc.d");while((ptr=readdir(dir))!=NULL){ printf("d_name: %s\n", ptr->d_name);}rewinddir函数用来设置目录流目前的读取位置为原来开头的读取位置函数原型void rewinddir(DIR *dp);参数dp:由opendir返回closedir函数用于关闭目录函数原型:int closedir(DIR *dp);参数与返回值dp:由opendir返回返回值:成功返回0,出错返回-1目录操作mkdir、rmdir函数读目录chdir、fchdir、getcwd函数chdir、fchdir函数进程的当前工作目录搜索所有相对路径名的起点例如:open(“./a/b.txt”,.............);假设当前工作目录为/home/testopen打开的路径即:/home/test/a/b.txtchdir、fchdir用于改变进程的当前工作目录chdir、fchdir函数函数原型int chdir(const char *pathname);int fchdir(int filedes);进程的当前工作目录改为pathname或filedes对应的路径成功返回0,出错返回-1getcwd返回当前工作目录的绝对路径即以“/”开头的路径函数原型char *getcwd(char *buf, size_t size);参数与返回值buf:存放绝对路径size:buf的大小(注意包括结尾的null字符)成功返回buf,失败返回NULL目录操作mkdir、rmdir函数读目录chdir、fchdir、getcwd函数文件和目录ext2文件系统在磁盘的组织stat、fstat、lstat函数文件的基本性质修改文件属性的函数硬链接与符号连接目录操作文件的操作文件的基本操作(打开、定位、读写、关闭)I/O效率文件共享其他重要I/O函数ext2文件系统在磁盘的组织stat、fstat、lstat函数文件的基本性质修改文件属性的函数硬链接与符号连接目录操作 关 键 词: 文件 linux 环境 编程 高级 第二

524d6daf746efaa52c3c71bbfe7ba172.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值