Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59384
  • 博文数量: 32
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 325
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-28 21:50
文章分类

全部博文(32)

文章存档

2011年(1)

2010年(6)

2009年(25)

我的朋友

分类: LINUX

2009-11-18 15:59:45


  • who命令通过读系统日志(即UTMP_FILE文件)的每条记录,显示当前已经登录的用户
  • 已登录的用户的记录的数据结构是struct utmp在/usr/include/utmp.h文件中定义的,UTMP_FILE文件也是定义在utmp.h文件中
  • Unix系统把数据存放在文件中,可以通过以下系统调用操作文件,以下的都是属于初级I\0,标准的是C库I\O:
    打开一个文件,#include
    open( filename, how )
           
    创建\清空一个文件,#include
    creat( filename, mode )
            
    将文件数据amt个字节读取到缓冲,#include
    read( fd, buffer, amt )

    将缓冲区amt个字节数据写到文件#include
    write( fd, buffer, amt )
             
    使文件位置指针指向文件中指定位置
    #include#include
                             
    lseek( fd, distance, base )
       
    关闭一个文件  #include
    close( fd )

  • cp命令就是复制文件,实现原理是将源文件内容读到内存中,再将内存写到目的文件中,用到了open,creat,read,write,close
  • 进程对文件的读写都要通过文件描述符fd,文件描述符表示文件和进程之间的连接,一个文件可以被多个进程同时打开,有不同的文件描述符
  • 每次系统调用都会导致用户模式和内核模式的切换以及执行内核代码,所以减少程序中的系统调用发生的次数可以提高程序的运行效率
  • 程序可以通过缓冲技术来减少系统调用的次数,仅当写缓冲区满或读缓冲区空时才调用内核服务
  • Unix内核可以通过内核缓冲来减少访问磁盘I/O的次数,标准C函数如fopen,getc,fclose,fgets的实现都包含了内核级缓冲,它们用到了一个结构FILE,并以此为基础构造了类似utmplib的中间层。(参考习题2.4)
  • Unix中的时间的处理方式是记录从某一个时间开始经过的秒数,是从1970年1月1日0时开始经过的秒数,在time.h中定义了time_t数据类型来表示这个秒数,typedef long int time_t;
    ctime()能将这个长整型秒数转换成人们日常所使用的时间格式
  • 当系统调用出错时会把全局变量errno的值设为相应的错误代码,然后返回-1,程序可以通过检查errno来确定错误的类型,并采取相应的措施

  • 这一章出现的系统调用函数
    文件操作:open,creat,write,read,lseek,close
    字符串:strncmp
    时间:time  //取得当前时间,长整型的
        ctime   //转换时间秒数为可读形式
    课后习题出现的系统调用函数

    geteuid        //获取有效的用户ID
    getuid         //获取真实的用户ID
    getpwuid       //通过uid获取相应的passwd数据结构的记录
    ttyname        //取得当前的tty名字
    本章重要的数据结构
    struct utmp
    定义在/usr/include/utmp.h文件
    生成的utmp文件内容是已登录用户的信息

阅读(333) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~