登陆 

     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. linux 搭建Java环境

    一.下载jdk/jre文件 下载链接 二.安装Java环境 1.解压文件到     /usr/java    目录 # tar zxvf jre-8u60-linux-x64.gz 2.配置环境变量 ...

  2. POJ_1159 Palindrome (线性动态规划+滚动数组)

    题意是说,给定一个字符串,问至少还需要插入多少个字符才能使得该字符串成为回文字符串. 这道题一开始做的时候用了一个简单的动态规划,开了一个5000*5000的数组,用递归形式实现,代码如下: 其中d[ ...

  3. win10家庭版的defender注册表关闭和开启

    关闭方法: 打开“命令提示符(管理员)”,然后输入: reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defe ...

  4. Spring Boot CRUD+分页(基于Mybatis注解方式)

    步骤一:关于Mybatis Mybatis 是用来进行数据库操作的框架.其中分页使用Mybatis中的PageHelper插件. Mybatis与hibernate对比: 1.hibernate是一个 ...

  5. 爬虫框架Scrapy之详解

    Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...

  6. Numpy学习1

    NumPy学习(1) 参考资料: http://www.cnblogs.com/zhanghaohong/p/4854858.html http://linusp.github.io/2016/02/ ...

  7. STL set集合用法总结(multiset)

    2017-08-20 15:21:31 writer:pprp set集合容器使用红黑树的平衡二叉树检索树,不会将重复键值插入,检索效率高 logn 检索使用中序遍历,所以可以将元素从小到大排列出来 ...

  8. LA 5135 井下矿工(点—双连通分量模板题)

    https://vjudge.net/problem/UVALive-5135 题意:在一个无向图上选择尽量少的点涂黑,使得任意删除一个点后,每个连通分量至少有一个黑点. 思路: 首先dfs遍历求出割 ...

  9. MySQL索引底层实现

    一.定义 索引定义:索引(Index)是帮助MySQL高效获取数据的数据结构.本质:索引是数据结构. 二.B-Tree m阶B-Tree满足以下条件: 每个节点至多可以拥有m棵子树. 根节点,只有至少 ...

  10. 关于Java中常用加密/解密方法的实现

    安全问题已经成为一个越来越重要的问题,在Java中如何对重要数据进行加密解密是本文的主要内容. 一.常用的加密/解密算法 1.Base64 严格来说Base64并不是一种加密/解密算法,而是一种编码方 ...