LINUX环境高级编程(四)课件

上传人:我*** 文档编号:145247667 上传时间:2020-09-18 格式:PPT 页数:190 大小:920.50KB
返回 下载 相关 举报
LINUX环境高级编程(四)课件_第1页
第1页 / 共190页
LINUX环境高级编程(四)课件_第2页
第2页 / 共190页
LINUX环境高级编程(四)课件_第3页
第3页 / 共190页
LINUX环境高级编程(四)课件_第4页
第4页 / 共190页
LINUX环境高级编程(四)课件_第5页
第5页 / 共190页
点击查看更多>>
资源描述

《LINUX环境高级编程(四)课件》由会员分享,可在线阅读,更多相关《LINUX环境高级编程(四)课件(190页珍藏版)》请在金锄头文库上搜索。

1、LINUX环境高级编程,中国地质大学(武汉)计算机学院 朱静,中国地质大学(武汉)计算机学院,第四讲 系统调用,线程,进程管理,文件管理,错误处理,系统调用概述,系统调用概述,系统调用概念 为了利用文件操作、进程管理和设备管理这些操作系统提供的服务,应用程序必须和操作系统之间交互。这种交互通过“系统调用”来实现。 系统调用是程序员和linux内核的函数接口。 对程序员来说,系统调用就象库函数(事实上有些就是库函数,由这些库函数再进行真正的系统调用),只是前者直接在linux的核心执行子程序调用。,中国地质大学(武汉)计算机学院,系统调用类别 文件管理 进程管理 错误管理,系统调用概述,中国地质

2、大学(武汉)计算机学院,文件管理系统调用的层次结构,文件,特殊文件,目录文件,open,close,read,write,lseek,unlink,chown dup2 fcntl fstat ftruncate stat truncate sync dup link,套接字,Internet套接字,mknod ioctl pipe,getdents,accept bind connect listen socket,gethostbyname gethostname htonl htons inet_addr inet_ntoa,系统调用概述,中国地质大学(武汉)计算机学院,进程管理系统调用

3、的层次结构,进程,信号,nice chdir wait fork exec exit,alarm singnal kill pause,系统调用概述,中国地质大学(武汉)计算机学院,错误处理系统调用的层次结构,错误处理,perror,#include char *strerror(int errnum) 返回错误原因的描述字符串,系统调用概述,中国地质大学(武汉)计算机学院,错误处理,错误处理perror() #include #include 系统调用失败时返回-1,但这个返回值说明不了错误发生的原因,要查询错误原因,必须了解: errno 保存上次系统调用错误的数字码的全局变量,初值为0

4、从程序访问errno,预定义的错误码在C程序中通过包含文件“/usr/include/errno.h”来定义。 perror程序把errno的当前值转换为文本描述,中国地质大学(武汉)计算机学院,例:/usr/include/errno.h所包含的部分错误常量: #define EPERM 1 /*Operation not permitted*/ #define ENOENT 2 /*No such file or directory*/ #define ESRCH 3 /*No such process*/ #define EINTR 4 /*Interrupted system call

5、*/,错误处理,中国地质大学(武汉)计算机学院,例:perror()应用 /showErrno.c #include #include #include main() int fd; /*打开一个不存在的文件,强制发生一个错误 */ fd=open(“nonexist.txt”,O-RDONLY); If (fd=-1) /*an error occurred*/ printf(“errno=%dn”,errno); perror(“main”); ,错误处理,中国地质大学(武汉)计算机学院,fd=open(“/”,O_WRONLY); /force a different error if

6、(fd=-1) printf(“errno=%dn”,errno); perror(“main”); /*execute a successful system call*/ fd=open(“nonexist.txt”,O_RDONLY | O_CREAT, 0644); printf(“errno=%dn”,errno); /display after successful call perror(“main”); errno=0; /*manually reset error variable*/ perror=(“main”); ,错误处理,中国地质大学(武汉)计算机学院,例:perr

7、or()应用 执行: $ ./showErrno errno=2 main:No such file or directory errno=21 main:Is a directory errno=29 even after a successful call main:Illegal seek main:Success after we reset manually $_,错误处理,中国地质大学(武汉)计算机学院,文件管理,文件管理基础 文件管理系统调用能够操作所有的普通文件、特殊文件和目录文件,包括: 基于磁盘的文件 终端 打印机等设备 进程间通信功能,如管道和套接字 多数情况下,最初使用

8、open()访问或创建文件,如果系统调用成功,则返回一个称为“文件描述符”的小整数,用于对该文件的I/O操作。如果open()失败,返回-1。,中国地质大学(武汉)计算机学院,Linux的文件系统实现 Linux系统中,实现文件存储和索引的核心是索引节点(inode)结构。每个inode存储了文件的属性、访问权限以及文件数据块的位置。inode是linux系统定位文件的基本途径。 VFS(虚拟文件系统):VFS屏蔽了各种具体的文件分区格式,使得用户程序对文件系统的操作不必关心底层的存储介质和文件系统类型的不同。,文件管理,中国地质大学(武汉)计算机学院,文件描述符 文件描述符从0开始按顺序编号

9、,前三个描述符具有特定含义: 0 标准输入(stdin)- - -键盘 1 标准输出(stdout)- - -显示器 2 标准错误(stderr) 单个文件能打开几次,因此它可以有多个文件描述符,文件,fd1,fd2,fd3,文件管理,中国地质大学(武汉)计算机学院,文件描述符 每个文件描述符有其专有的属性集,与它所关联的文件无关。这些属性包括: 记录文件中进行读写操作的偏移量的文件指针; 指示如果进程调用exec(),文件描述符是否应自动关闭的标志; 指示对文件的所有输出是否应追加到文件末尾的标志;,文件管理,中国地质大学(武汉)计算机学院,文件描述符 以下属性只在文件是管道和套接字这样的特

10、殊文件时才有意义: 指示如果文件当前不包含任何输入,进程是否应阻塞来自该文件的输入的标志; 指示如果文件输入变为可用,应发送一个SIGIO信号的进程ID或进程组的数字; open(),read(),fcntl()等系统调用能操作这些标志。,文件管理,中国地质大学(武汉)计算机学院,文件管理目录,目录操作 getcwd获得当前工作目录 #include char * getcwd(char *buffer,size_t size) 调用成功把当前目录字符串写到缓冲区buffer中,并返回指向当前工作目录字符串的指针,如果目录字符串长度超出了参数size给出的缓冲区长度,目录被删除或者权限发生变化

11、,则调用失败返回NULL。,中国地质大学(武汉)计算机学院,#include #include int main(void) char cur_work_dirPATH_MAX; int i=0; printf(Current Max Path Length is:%dn,PATH_MAX); if (getcwd(cur_work_dir,PATH_MAX)=NULL) perror(Couldnt get current working directory); return 1; printf(Current Working Directory is:); while(cur_work_d

12、iri!=0) printf(%c,cur_work_diri); i+; printf(n); ,文件管理目录,中国地质大学(武汉)计算机学院,运行结果: Current Max Path Length is:4096 Current Working Directory is:/root,文件管理目录,中国地质大学(武汉)计算机学院,pathconf获得系统目录最大长度 #include long pathconf(char *path,int name) 调用成功返回目录相关的极限值 调用失败返回-1 path可以是包含文件名的路径,也可以是目录路径 name的取值可以是: _PC_LIN

13、K_MAX _PC_NAME_MAX _PC_PATH_MAX ,文件管理目录,中国地质大学(武汉)计算机学院,例: #include #include #include int main(void) long cur_path_len; char * cur_work_dir; if (cur_path_len=pathconf(.,_PC_PATH_MAX)=-1) perror(couldnt get current working path length); return 1; std:coutcurrent path length is :cur_path_lenstd:endl;,

14、文件管理目录,中国地质大学(武汉)计算机学院,if (cur_work_dir=(char *)malloc(cur_path_len)=NULL) perror(couldnt allocate memory for the pathname!); return 1; if (getcwd(cur_work_dir,cur_path_len)=NULL) perror(couldnt get current working directory!); return 1; std:coutCurrent working directory is:cur_work_dirstd:endl; ret

15、urn 0; 运行结果: current path length is :4096 Current working directory is:/root,文件管理目录,中国地质大学(武汉)计算机学院,chdir, fchdir切换当前目录 #include int chdir(const char * path) int fchdir(int fd) 调用成功返回0,失败返回-1 path 指向目录字符串的指针 fd 目录的文件描述符,文件管理目录,中国地质大学(武汉)计算机学院,mkdir,rmdir-创建、删除目录 #include #include int mkdir(const char *pathname,mode_t mode) pathname:要创建的目录名 mode:指定要创建目录的权限 #include int rmdir(const char * pathname) pathname:要删除的目录名,文件管理目录,中国地质大学(武汉)计算机学院,opendir-打开目录 #include #include DIR * opendir(const char *pathname); 调用成功打开pathname指定的目录并建立一个目录流,返回指向结构体DIR的指针。调用失败返回NULL。 readdir-获得

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号