Chapter2-用户、文件操作与联机帮助.pptVIP

  • 5
  • 0
  • 约6.05千字
  • 约 33页
  • 2016-02-24 发布于江苏
  • 举报
Chapter2-用户、文件操作与联机帮助.ppt

off_t oldpos = lseek(int fd, off_t dist , int base) 参数:fd 文件描述符 dist 移动的距离 base: SEEK_SET =文件的开始 SEEK_CUR =当前位置 SEEK_END =文件结尾 返回值:-1 遇到错误 oldpos 指针变化前的位置 Lseek的用法 小结 Who命令通过读系统日志的内容显示当前已经登录的用户。 系统调用操作文件 open(filename,how) creat(filename,mode) read(fd,buffer,amt) write(fd,buffer,amt) lseek(fd,distance,base) close(fd) 进程对文件的读/写都要通过文件描述符,文件描述符表示文件和进程间的连系。 每次系统调用都会导致用户模式和内核模式的切换及执行内核代码,所以减少程序中的系统调用发生的次数可以提高程序运行效率。 程序可以通过缓冲技术来减少系统调用的次数。 当系统调用出错时会把全局变量error的值设为相应的错误代码,然后返回-1,程序可以通过检查error来确定错误的类型,并采取相应措施。 本章的知识在系统中都可以找到,联机帮助中有命令的说明。 * * Unix/Linux编程 北京化工大学 信息科学与技术学院计算机系 易军凯 yijk@mail.buct.edu.cn 第2章 用户、文件操作与联机帮助 --编写who命令 概念与技巧: 联机帮助的作用与使用方法 Unix的文件操作函数:open、read、write、lseek、close 文件的建立与读写 文件描述符 缓冲:用户级的缓冲与内核级的缓冲 内核模式、用户模式、和系统调用的代价 Unix表示时间的方法与时间格式间的转换 借助utmp文件来列出已登录的用户 系统调用中的错误检测与处理 相关的系统调用: open、read、write、creat、lseek、close perror 相关命令: man who cp login 主要内容: 2.1 编写who命令 2.2 编写cp(读和写) 2.3 提高文件I/O效率的方法,使用缓冲 2.4 内核缓冲技术 2.5 文件读写 2.1.1 who命令能做些什么? 2.1.2 who命令是如何工作的? 2.1.3 如何编写who? 2.1 编写who命令 2.1.1 who命令能做些什么? 运行 $ who 用于获取信息:哪些用户正在使用系统,系统是否很繁忙,某人是否正在使用系统等。 查看who的帮助:$ man who 描述(DESCRIPTION)部分是关于命令功能的详细阐述;选项(OPTIONS)部分给出了命令行中每一个选项的说明;参阅(SEE ALSO)包含与这个命令相关的其它主题。 2.1.2 who命令是如何工作的? 阅读联机帮助: $ man who 搜索联机帮助: $ man –k user | more 阅读.h文件: $ more / usr / include / foo.h 从参阅部分(SEE ALSO)中的得到启示 who的工作原理: who通过读文件来获得需要的信息,而每个用户在文件中都有对应的记录。 2.1.3 如何编写who (1)问题:如何从文件中读取数据结构? 可以用getc和fgets逐个字节地读取,但这样太繁琐,而且效率很低。 查看联机帮助: $ man – k file | grep read $ man 2 read (2)答案:使用open、read和close int fd = open ( char * name , int how ) 参数:name :文件名 how :O_RDONLY,O_WRONLY, or O_RDWR 返回值:-1 遇到错误 int 成功返回 打开文件是内核提供的服务,文件被顺利打开,内核会返回一个正整数的值,这个数值就叫做文件描述符。必须通过文件描述符对文件进行操作。 fd = open ( name , mode ) n = read ( fd , array , numchars ) 目标:把数据读取到缓冲区 返回值:-1 遇到错误 numread 成功读取,返

文档评论(0)

1亿VIP精品文档

相关文档