[APUE]再读之 unix 基础知识

1. 登录

1.1 登录名  unix 为多用户系统,登录信息存储在/etc/passwd中,包含登录名,起始目录,shell

1.2 shell. 常用的为bash shell 

1.3 文件和目录 

  • unix文件系统是目录和文件的一种层次安排,为倒着的一棵树,起点目录为 /
  • 斜线和空操作符不能出现在文件名中
  • 路径名可以为绝对路径和相对路径
  • 工作目录,每个进程都有一个工作目录,即为当前目录。
  • 起始目录,登录时,当前目录设置为起始目录,即为当前用户的home目录
书上的myls的例子
#include 
#include 


int main(int argc, char* argv[])
{

    if (argc<2)
    {
        printf("Please program.exe directory name\n");
        exit(0);
    }
    else
        printf("Directory name is %s\n", argv[1]);
    DIR* dp;
    struct dirent* dirp;
    if ( (dp= opendir(argv[1]))==NULL)
    {
        printf("can not open directory %s\n",argv[1]);
        exit(0);
    }
    else
        printf("Open directory %s succeed \n",argv[1]);
    while((dirp = readdir(dp))!=NULL)
    {
        printf("%s\n",dirp->d_name);
    }
    closedir(dp);
    exit(0);

}

1.4 输入和输出

  • 文件描述符 一个小的非负整数,由内核标识特定进程正在访问的文件。当内核打开或者创建新文件时,就可以使用它。
  • 标准输入,标准输出和标准出错,文件描述符分别为0,1,2
  • 不用缓存的IO。open,read,write, lseek, 以及close提供不用缓存的IO.
  • 带缓存的IO, fget, fput系列

不带缓存IO demo:


#include 
#include 
#include 

#define BUFFER_SIZE 4096
int main(int argc, char* argv)
{
    char buf[BUFFER_SIZE];
    int n;
    while ((n=read(STDIN_FILENO,buf,BUFFER_SIZE))>0)
    {
        if(write(STDOUT_FILENO,buf,n)!=n)
        {
            printf("write error.");
            exit(-1);
        }
        else
            printf("write %d bytes to STDOUT.", n);
    }
    if (n<0)
    {
        printf("read error");
    }
    else
        printf("read ok");
    exit(0);
}

带缓存IO:


#include 
#include 

int main(int argc, char* argv)
{

    int c;
    while((c=getc(stdin))!=NULL)
    {
        if(putc(c,stdout)==EOF)
        {
            printf("putc error");
            exit(0);
        }
        if(ferror(stdin))
        {
            printf("stdin error");
            exit(0);
        }
    }
}

1. 5 程序进程

1.5.1 程序为磁盘上可执行文件

1.5.2 进程为运行着的程序, 每个进程用一个唯一的数字标识符表示。

1.5.3 进程控制, exec, wait,fork


1.6 ANSI c

1.7  

extern int errno; 

char* strerror(int errno)

1.8 用户标识

用户ID和组ID组成,root 用户的用户ID和组ID为0

1.9 信号

信号的默认处理方式有三种:忽略,提供处理函数,系统默认方式处理。


2. 0 unix 时间

1. 日历时间, 1970,1,1 0:0:0 到当前的秒数

2. 进程时间, 包括时钟时间, 用户CPU时间,系统CPU时间。 时钟时间跟当前系统负载状况有关,用户CPU时间为执行用户代码花费的时间,系统CPU时间为执行进程内核花费的时间

你可能感兴趣的:([APUE]再读之 unix 基础知识)