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\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 用于保存这种时间值。

系统调用和库函数

     概括的来说,库函数就是对系统调用的进一步封装。

时间: 2024-10-09 22:43:53

UNIX 基础知识的相关文章

APUE 学习笔记(一) Unix基础知识

1. Unix 体系结构 内核的接口被称为系统调用 公用函数库构建在系统调用接口之上 应用软件既可以调用公用函数库,也可以直接进行系统调用 2. 文件和目录 目录操作函数:opendir---> readdir---> closedir struct dirent 结构体 stat 系统调用 3.程序.进程.线程 程序:存放在磁盘上.并处于某个目录中的一个可执行文件.使用exec系列函数将程序从磁盘读入存储器,并使其执行 进程:程序的执行实体.进程控制的3个函数:fork.exec.waitp

APUE第一章 UNIX基础知识

前语:本人是半路出家做程序员,实际上应付平时工作中的业务还可以,但是基础知识实在薄弱,当然也跟中国计算机教育有关系,平时跟同事聊天,实际上就算是科班出身,对于计算机本身的了解也知之甚少,因此在毕业两周年到来的时候,给自己确定了以后的技术学习方向,同时也决定了将基础部分补充起来,特来CSDN开这个专题,去学习程序员圣经般著作-<UNIX高级环境编程>,这本书也是被某个同事经常提起,书本比较厚,但是不能操之过急,但是也不要指望一次性就能学完学透,没事回来看看,总有收获,自勉之. 一.UNIX体系结

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

2015.1.27星期二,早晨阴天,中午下雪了今天上午老师不上课,程序语句,记一下: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);} 从标准输入读命令并执行:int main(){ char

apue- chapter 1 UNIX基础知识

1.C++实现ls命令 #include<dirent.h> #include<stdlib.h> #include<iostream> #include "apue.h" using namespace std; int main(int argc,char * argv[]){ DIR *d struct dirent *dirp; if(argc!=2){ cout<<"usage: ls directory_name&q

UNIX基础知识

一.UNIX 系统 UNIX内核的接口称之为系统调用.公用函数库构建在系统调用接口之上.应用程序既可以使用公用函数库,也可以使用系统调用. UNIX shell 是一个特殊的应用程序,它为其他应用程序提供了一个接口. 路径名由斜线分隔的一个或者多个文件名组成的序列: 以斜线开头的路径名称为绝对路径名 以非斜线开头的路径名称为相对路径名 文件系统根的名字 / 是一个特殊的绝对路径名.它不包含任何其他的字符. 查看UNIX系统ls命令的 man帮助手册:man 1 ls或者 man -s1 ls.

自学:Unix环境高级编程 第一章 Unix基础知识

1.2 Unix体系结构 内核(kernel):控制计算机硬件资源,提供程序运行环境. 系统调用(system call):内核的接口. 公用函数库构建在系统调用接口之上. 应用程序既可使用公用函数库,也可使用系统调用 shell是一个特殊的应用程序,为运行其他应用程序提供了一个接口. 1.3 登录    1.登录名 系统在其口令文件(通常是/etc/passwd文件)中查看登录名. 例如:sar:x:205:105:Stephen Rago:/home/sar:/bin/ksh 口令文件中的登

第一章:Unix基础知识

1.1:引言 1.2:Unix体系结构 1.3:登录 1.4:文件和目录 1.5:输入和输出 1.6:程序和进程 1.7:出错处理 1.8:用户标识 1.9:信号 1.10:时间值 1.11:系统调用和库函数 1.12:小结 个人总结:

APUE(1)----UNIX基础知识

一.UNIX体系结构 所有操作系统都为他们所运行的程序提供服务,典型的服务包括:执行新程序.打开文件.读文件.分配存储区等.严格意义上来说,操作系统可以定义为一种软件,它控制计算机硬件资源,提供程序运行环境.我们也将这种软件成为内核,因为它相对较小,并且位于环境的核心.内核的接口被称为系统调用.公共函数库构建在之上,普通的应用程序可以调用系统调用,也可以调用公共函数库.shell是一个特殊的应用程序,位运行其他应用程序提供了一个接口. 二.文件和目录 1.文件系统 UNXI文件系统是目录和文件的

第1章 UNIX基础知识

1.1 引言 所有的操作系统都为程序提供服务:执行新程序,打开文件,读文件,分配存储区以及获取当前时间 1.2 unix体系结构 内核的接口称之为系统调用 公共函数库构建再系统调用接口之上,应用程序既可以使用公共库函数也可以使用系统调用接口,shell  是一个特殊的应用程序,为其他应用程序提供一个接口 1.3 shell shell是一个命令行解释器,shell的用户输入通常来自终端,有时来自文件(成为shell脚本) 1.4 文件和目录 stat 和fstat函数返回包含所有文件属性的信息结