• UNIX 基础知识


    登陆 
         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 ", 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 用于保存这种时间值。
     
    系统调用和库函数
         概括的来说,库函数就是对系统调用的进一步封装。
  • 相关阅读:
    css样式预处理器
    cookie&localStorage&sessionStorage
    《程序员面试金典》---读书笔记
    《Linux多线程服务端编程--使用muduo C++ 网络库》---读书笔记
    慢慢走上正轨
    padding 和 margin 不为人知的一面 ---(深度整理)
    html+css代码需要注意的地方(整理)
    前言
    MikTex 和 TexStudio 输入中文日文
    .htaccess 二级域名绑定子目录
  • 原文地址:https://www.cnblogs.com/wchyi/p/5559677.html
Copyright © 2020-2023  润新知