登陆 

     1.登录名 
          系统在其 口令文件(通常是/etc/passwd文件) 中查看用户名,口令文件中包含了有关用户的信息。 
     2.shell 
          shell是一个命令解析器,读取用户输入的内容,然后执行命令。
 
文件和目录
     1.文件系统 
          UNIX文件系统是 目录 和 文件 的一种层次结构。 所有 的起点成为(root)目录, 根目录的名称是一个” / ” 
          目录 是一个包含目录项的文件。 可以认为每个目录项都包含一个文件名,同时还包含文件属性的信息(stat和fstat函数返回包含所有文件属性的一个结构)。 
     2.文件名 
          目录中的各个名字称为文件名(filename)。 创建目录时会自动创建两个文件名: . 和 .. 分别指向当前目录和父目录。 
     3.路径名 
          ” / ” 开头称为绝对路径名, 否则都成为相对路径名。 
          相对路径名指向相对于当前目录的文件。
 
    实例
           列出一个目录中所有文件的名字。
               
           #include "apue.h"
           #include <dirent.h>
 
           int main(int argc, char *argv[])
           {
                  DIR *dp;
                  struct dirent *dirp;
 
                  if (argc != 2)
                      err_quit("usage: ls directory_name");
 
                  if ((dp = opendir(argv[1])) == NULL)
                      err_sys("can't open %s", argv[1]);
 
                  while ((dirp = readdir(dp)) != NULL)
                       printf("%s\n", dirp -> d_name);
 
                  closedir(dp);
                  exit(0);
              }
        • 包含 系统头文件 dirent.h 以便使用 opendir 和 readdir 的函数原型。
        • opendir 函数返回 指向 DIR 结构的指针。 再将指针传给readdir函数。readdir函数返回一个指向dirent结构的指针。
 
     4.工作目录
          每个进程都有一个工作目录(working directory),或成为当前工作目录。所有相对路径名都从工作目录开始解释。
          进程可以用 chdir 函数更改其工作目录。
 
     5.起始目录
           登陆时, 工作目录设置为起始目录(home directory) , 起始目录 从 口令文件 中 相应用户的 登陆项 中取得。
 
输入和输出
     
     1. 文件描述符
          文件描述符(file descripyor) 通常是一个 小的 非负整数 。
          内核用以标识特定进程正在访问的文件。
          当内核 打开 一个现有文件 或者 创建 一个新文件时, 都返回一个文件描述符。
          在  或  文件的时候,可以使用文件描述符。
 
     2. 标准输入,标准输出或标准错误
          每当运行一个新程序时,所有的 shell 都为其打开 3个 文件描述符。标准输入(standard input),标准输出(standard output),标准错误(standard error)。
          大多数 shell 都提供一种方法,使其中任何一个或所有描述符都能 重定向 到某个文件,例如:
               ls > file.list
               执行 ls 命令, 其 标准输出 重定向 到名为file.list 的文件中。
 
     3. 不带缓冲的 I/O
          函数 open, read, write, lseek, close 提供了不带缓冲的I/O。 都使用文件描述符。
 
               实例
                    #include "apue.h"
                    
                    #define BUFFSIZE 4096
               
                    int main(void)
                    {
                         int n;
                         char buf[BUFFSIZE];
          
                         while (( n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
                              if( write(STOUT_FILENO, buf, n) != n)
                                   err_sys("write error);
 
                         if(n<0)
                              err_sys("read error");
 
                         exit(0);
                    }
 
      • 头文件<unistd.h> 包含 STDIN_FILENO 和 STDOUT_FILENO 常量。
      • read函数返回读取的字节数,当达到输入文件的尾端时,read返回0,如果发生错误返回-1。
 
      4. 标准I/O
           标准I/O函数 为不带缓冲的I/O函数提供了一个带缓冲的接口。使用标准I/O函数不用考虑如何选最佳的缓冲区大小。
 
                     实例
                          使用标准输入和输出
                         
                      #include "apue.h"
                     
                     int main(void)
                     {
                         int c;
                         
                         while (( c = getc(stdin)) != EOF)
                              if( putc(c,stdout) == EOF)
                                   err_sys("output error");
 
                         if (ferror(stdin))
                              err_sys("input error");
 
                         exit(0); 
                     }     
                         函数getc一次读取一个字符,然后putc将此字符写到标准输出。
 
 
程序和进程
     1. 程序
          程序是一个存储在磁盘的可执行文件。 内核 使用 exec函数 将程序读入内存并执行。
     2. 进程和进程ID
          程序执行的实例被称之为进程(process)。
          
          UNIX系统确保每个进程都有独立的 进程ID(非负整数)
 
          getpid() 可以获取进程ID。
 
     3. 进程控制
          3个主要的进程控制函数 : fork , exec , waitpid 。 (exec函数有7个变体, 统称为exec函数)
 
     4. 线程和线程ID
          一个进程中的所有线程共享同一地址空间 , 文件描述符 , 栈 , 进程相关属性。
 
          
出错处理
     <errno.h> 中定义了 errno 以及可以赋予它的各种常量。
     这些常量都以字符E开头。
 
     
     strerror( int errnum ) 函数将 errnum 映射为一个出错消息字符串,返回此字符串的指针。
 
     perror( const char *msg ) 函数 在标准错误上产生错误信息。
 
 
用户标识
     1. 用户ID
          口令文件中, 每个用户有一个唯一的用户ID, root用户ID 为 0。
     2. 组ID
          口令文件中, 组文件 将 组名 映射为 数值的组ID。 组文件同常是 /etc/group
          口令文件 包含了 登录名和用户ID之间的映射关系, 组文件包含了组名和组ID之间的映射关系。
          getuid 和 getgid 分别返回 用户ID 和 组ID。
     3. 附属组ID
          一个用户属于最多16个其他的组。
          登陆时, 读文件/etc/group 寻找列有该用户作为其他成员的前16个记录就可以得到该用户的附属组ID。
 
 
信号(signal)
     信号用于通知进程发生了某种情况。
     
     进程有3种处理信号的方式:
          1.忽略信号
          2.按系统默认方式处理(比如系统自动终止程序)
          3.提供一个函数,信号发生时调用此函数。如: signal( ) 函数
 
 
时间值
     1. 日历时间
          指 自 1970年1月1日 00:00:00 这个时间开始缩经过的 秒数 累计值。
          系统基本数据类型 time_t 用于保存这种时间值。
     2. 进程时间
          CPU时间  用来度量进程使用的CPU资源。
          系统基本数据类型 clock_t 用于保存这种时间值。
 
系统调用和库函数
     概括的来说,库函数就是对系统调用的进一步封装。

UNIX 基础知识的更多相关文章

  1. UNIX环境高级编程--第一章 UNIX基础知识

    第一章 UNIX基础知识 1.2 UNIX体系结构   从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境.我们将这种软件称为内核(kernel),因为 它相对较小,且 ...

  2. 《UNIX环境高级编程》(APUE) 笔记第一章 - UNIX基础知识

    1 - UNIX基础知识 Github 地址 1. 操作系统 可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境.通常将这种软件称为 内核 (kernel) .( Linux 是 GN ...

  3. 《UNIX环境高级编程》笔记——1.UNIX基础知识

    这一章节侧重一些基本概念和书中用到的一些名词. 一.引言 所有的操作都提供服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储区以及获得当前时间等. 二.UNIX体系结构 其实linux常见 ...

  4. 第一章:UNIX基础知识

    本章内容主要是为了学习UNIX的基本知识和一些最基本的系统函数. 学习的关键就是跟随者书本敲代码.本节遇到的第一个问题就死本书的apue.h这个文件:一开始没有注意这个文件,盲目的去百度,一番百度之后 ...

  5. UNIX基础知识之程序和进程

    一.程序 程序(program)是存放在磁盘上.处于某个目录中的一个可执行文件.使用6个exec函数中的一个由内核将程序读入存储器,并使其执行. 二.进程和进程ID 程序的执行实例被称为进程(proc ...

  6. UNIX环境高级编程 第1章 UNIX基础知识

    所有操作系统都为运行在它之上的程序提供各种服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储空间.提供时间等. UNIX体系结构 严格来说,操作系统是一种软件,它控制计算机硬件资源,提供程 ...

  7. UNIX,基础知识,文件IO,文件和目录

    2015.1.27星期二,早晨阴天,中午下雪了今天上午老师不上课,程序语句,记一下:main(void){ int c; while((c = getc(stdin)) != EOF) if(putc ...

  8. UNIX基础知识之时间值

    本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. 长期以来,UNIX系统一直使用两种不同的时间值 ...

  9. UNIX基础知识之信号

    本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. 信号(signal)是通知进程已发生某种情况的 ...

  10. UNIX基础知识之用户标识

    一.用户ID 口令文件(/etc/passwd)登录项中的用户ID(user ID)是个数值,它向系统标识各个不同的用户.系统管理员在确定一个用户的登录名的同时,确定其用户ID.用户不能更改其用户ID ...

随机推荐

  1. 翻翻git之---丰富多样的路由跳转开源库 ARouter

    转载请注明出处:王亟亟的大牛之路 有一段时间没更新博客了,最近也没学什么新东西,正好组里小伙在做路由跳转的一个"公共库",然后正好最近这样的轮子不少,我也就跟着看看,学习一下人家的 ...

  2. SEM关键词的三种分类方式

    关键词分类是为了使sem账户搭建结构清晰便于管理关键词.基于对需求人群的深入分析,每个账户都有其独特的分类方式,比如招商加盟行业更多的是地域分类,品牌类企业通常用词性分类即可,而冷门行业用人群分类比较 ...

  3. Continue SQL query even on errors

    trymysql --force < sample_data.sql Mysql help section says -f, --force         Continue even if w ...

  4. python ConfigParse模块(转)

    最近写程序要用到配置文件,那么配置文件的解析就很重要了,下文转自chinaunix 一.ConfigParser简介 ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ...

  5. TCGA学习1--下载level3 level4数据

    1.使用firehose_get   下载level3 level4数据 https://confluence.broadinstitute.org/display/GDAC/Download exa ...

  6. 一切从Trade开始(转)

    taobao.trades.sold.get 取得交易列表 从店铺取得时间 taobao.shop.get (nick,field)shop.created 循环读取从开店时间到当前时间的所有交易 t ...

  7. hadoop2.6.0集群配置

    1.修改机器名 集群的搭建最少需要三个节点,机器名分别修改为master,slave1,slave2.其中以master为主要操作系统. 修改hostname: sudo gedit /etc/hos ...

  8. Unity 和 3DMAx

    3DMax转换成DAE模式才会有纹理信息.

  9. IdentityServer4在Asp.Net Core中的应用(三)

    今天的内容是授权模式中的简化模式,还是先看以下授权流程图: 在这种模式中我们将与OpenID结合使用,所以首先我们要了解OpenID和OAuth的区别,关于他们的区别,在我上一篇博客<理解Ope ...

  10. KVM与XEN虚拟化环境究竟有何不同

    虚拟化的概念在近些年收到了很大程度上的普及,求其原因很简单:虚拟化能够最大程度利用资源,为企业节约成本.目前市面较受欢迎的虚拟架构主要有KVM.XEN和VMware,其中,KVM和XEN都是免费开源的 ...