UNIX基础(一)

2016-01-27


登录名

登录名通常在/etc/passwd中,item中7项分别代表登录名,加密口令,数字id,数字组,注释字段,起始目录及shell程序
常用的shell有Bourne shell /bin/sh C shell /bin/csh KornShell /bin/ksh
其中Bourne shell比较流行

文件系统

stat和fstat函数返回一个包含所有文件属性的信息结构

文件名

斜线(/)和null不能出现在文件名中。当创建一个新目录是自动创建了.和..分别代表当前目录和父目录。文件系统中文件名最长255
读取根目录程序如下

#include 
#include 
#include 


int main(int argc, const char * argv[]) {
    DIR *dir;
    struct dirent *dirp;
    if (argc == 1) {
        dir = opendir("/");
    } else if (argc == 2) {
        dir = opendir(argv[1]);
    }
    while ((dirp = readdir(dir)) != NULL) {
        printf("%s\n",dirp->d_name);
    }
    closedir(dir);
    return 0;
}

工作目录

每个进程都有一个工作目录也称当前工作目录,所有相对路径都从工作目录开始解释。进程可以用chdir函数更改工作目录

起始目录

登陆时,工作目录设置为起始目录,该目录从口令文件中读取

输入和输出

文件描述符:内核用于标识一个特定进程正在存访的文件,为非负整数。
一般情况下每当运行一个新程序时所有she'll都为其打开三个文件描述符:标准输入、标准输出及标准出错。如果简单命令没有特殊处理则它们都连向终端。ls > file.list 为重定向

不用缓存的io

open read write lseek close提供了不用缓存的io 它们都用文件描述符进行工作
中包含了STDIN_FILENO和STDOUT_FILENO它们制定了标准输入和标准输出的文件描述符

标准io

标准io提供一种对不用缓存的io函数的带缓存的界面,无需担心如何选择缓存。如 fgets能完整读取一行 printf等 标准io一般包含在
getc putc一次读一个字符 stdin stdout分别表示标准输入和标准输出文件

程序和进程

程序:存放在磁盘文件中的可执行文件,使用6个exec函数中的一个由内核将程序读入存储器并执行
程序的执行实力被称为进程,每个进程的唯一数字标识为进程id为非负值
进程控制的主要函数 fork exec waitpid
调用fork创建一个新进程,新进程是调用进程的复制品,调用进程是父进程,新创建进程为紫禁城。fork对父进程返回新紫禁城的非负进程id,对子进程则返回0.子进程也从fork处开始执行。

#include 
#include 
#include 
#include 
#include 


int main(int argc, const char * argv[]) {
    pid_t pid;
    pid = fork();
    if (pid > 0) {
        printf("I am the parent pid = %d\n", pid);
    } else if (pid == 0) {
        printf("I am child!\n");
    }
    return 0;
}

execlp函数从PATH环境变量所指的目中查找符合参数file的文件名,找到后执行该文件,然后将第二个以后的参数当做文件的arg[0]、arg[1]...
如果执行成功则函数不会返回,执行失败则返回-1。eg execlp(“ls”,”ls”,”-al”,”/etc/passwd”,(char *)0);
waitpid 此函数会阻塞当前进程直至有信号传来或者进程结束

你可能感兴趣的:(UNIX基础(一))