第一章 Unix基础知识

unix环境高级编程,尤晋元,2000年

只是把书里的代码敲一遍跑一下,熟悉一下书里的东西,没什么特别的;

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

// list directory content
int ls(int, char**);

// copy input to output
int IO_Nobuffer();

int standardio();

int shell(int, char**);

int main(int argc, char** argv)
{
    printf("current process id: %d, user id: %d, group id: %d\n",
                    getpid(), getuid(), getgid());
    shell(argc, argv);
    //standardio();
    //IO_Nobuffer();
    //ls(argc, argv);
    exit(0);
}

#include <sys/types.h>
#include <dirent.h>

int ls(int argc, char** argv)
{
    if(argc < 2)
    {
        printf("a single argument is required!\n");
        exit(-1);
    }

    DIR* dp;
    struct dirent* dirp;

    dp = opendir(argv[1]);
    if(!dp)
    {
        printf("open %s failed!\n", argv[1]);
        exit(-1);
    }

    while((dirp = readdir(dp)) != NULL)
    {
        printf("%s\n", dirp->d_name);
    }

    closedir(dp);
    return 0;
}

#include <unistd.h>

#define BUFFER_SIZE 8192

int IO_Nobuffer()
{
    int n;
    char buffer[BUFFER_SIZE];

    while((n = read(STDIN_FILENO, buffer, BUFFER_SIZE)) > 0)
    {
        if(write(STDOUT_FILENO, buffer, n) != n)
        {
            printf("write error!\n");
            exit(-1);
        }
    }

    if(n < 0)
    {
        printf("read error!\n");
        exit(-1);
    }
    return 0;
}

int standardio()
{
    int c;
    while((c = getc(stdin))!= EOF)
    {
        printf("%d\n", c);
        if(putc(c, stdout) == EOF)
        {
            printf("output error!\n");
            exit(-1);
        }
    }

    if(ferror(stdin))
    {
        printf("input error!\n");
        exit(-1);
    }
    exit(0);
}

#include <sys/wait.h>
#include <string.h>
int shell(int argc, char** argv)
{
    char buffer[BUFFER_SIZE];
    pid_t pid;
    int status;

    printf("%% ");
    while(fgets(buffer, BUFFER_SIZE, stdin) != NULL)
    {
        buffer[strlen(buffer) - 1] = 0;

        if((pid = fork()) < 0)
        {
            printf("fork error!\n");
            exit(-1);
        }
        else if(pid == 0) // child process
        {
            execlp(buffer, buffer, (char*)0);
            exit(127);
        }

        if((pid = waitpid(pid, &status, 0)) < 0)
        {
            printf("wait error!\n");
            exit(-1);
        }

        printf("%% ");
    }

    return 0;
}

reference

unix环境高级编程<尤晋元>

http://en.wikipedia.org/wiki/Fork_(system_call)

http://unixhelp.ed.ac.uk/CGI/man-cgi?execve+2

http://unixhelp.ed.ac.uk/CGI/man-cgi?execlp+3

http://www.cplusplus.com/reference/cstdio/fgets/

时间: 2024-10-11 13:36:58

第一章 Unix基础知识的相关文章

APUE第一章 UNIX基础知识

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

UNIX环境高级编程学习笔记(第一章UNIX基础知识)

总所周知,UNIX环境高级编程是一本很经典的书,之前我粗略的看了一遍,感觉理解得不够深入. 听说写博客可以提高自己的水平,因此趁着这个机会我想把它重新看一遍,并把每一章的笔记写在博客里面. 我学习的时候使用的平台是Windows+VMware+debian,使用secureCRT来连接(可以实现多个终端连接). 因为第一章是本书大概的描述,所以第一章的我打算写得详细一点,而且书本的原话占的比例会比较多,重点的东西会用粗体显示出来. 1.1  引言 所有操作系统都为他们所运行的程序提供服务.典型的

第一章 UNIX 基础知识

1.1 Unix体系结构 OS定义为一种软件,它控制计算机硬件资源,提供程序运行环境,一般称其为内核(kernel),它体积小,位于环境中心. 内核的接口为系统调用(system call),共用函数库构建在系统调用上,应用软件既可以使用公用函数库,也可以使用系统调用.shell是一种特殊的应用程序,它为运行其他应用程序提供一个接口. 下图为 UNIX 体系结构: 广义上,OS包括内核和一些软件,例如 Linux 是 GNU 操作系统使用的内核,可以称这种操作系统为 GNU/Linux,但是通常

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

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

APUE学习笔记:第一章 UNUX基础知识

1.2 UNIX体系结构 从严格意义上,可将操作系统定义为一种软件(内核),它控制计算机硬件资源,提供程序运行环境.内核的接口被称为系统调用.公用函数库构建在系统调用接口之上,应用软件即可使用公用函数库,也可使用系统调用.shell是一种特殊的应用程序,它为运行其他应用程序提供了一个接口 从广义上,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并给予计算机以独有的特性(软件包括系统实用程序,应用软件,shell以及公用函数库等) 1.3  shell shell是一个命令行解

第一章 计算机基础知识

第一章 计算机基础知识 第一部分 概述 1.1946年2月15日,第一台计算机 ENIAC 2.物理原件(电子原件) 第一代:电子管.第二代:晶体管.第三代:中小规模集成电路.第四代:超大规模集成电路.第五代:超导材料.第六代:人工智能.#考试考到第四代. 3.计算机的分类 巨型机,大型机,中型机,小型机,微型机 现在的巨型机也是存在的 4.微处理器(CPU.中央处理器)由控制器.寄存器.运算器组成 第二部分 微机系统的组成 CPU>内存>外存 #速度 CPU和内存之间有一个CACHE,叫做高

高项3.7日第一次课,第一章信息化基础知识与第二章信息系统服务管理梳理

第一章 信息化的基础知识 1.国家信息化体系要素: 主要包括6要素,信息技术应用(龙头).信息资源(关键).信息网络(必要手段).信息技术产业(基础).信息化人才(成功之本).信息化法规政策和规范(保障). 2.电子政务: 电子政务建设的指导原则: (1)统一规划,加强领导. (2)需求主导,突出重点. (3)统一规划,拉动产业. (4)统一标准,保障安全. 主要任务: (1)电子政务网络由政务内网和政务外网构成,两网之间物理隔离,政务外网与互联网之间逻辑隔离.政务内网主要是副省级以上政务部门的

第一章 Shell基础知识

1.1 简介 Shell是一个C语言编写的脚本语言,它是用户与Linux的桥梁,用户输入命令交给Shell处理,Shell将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户. 下面是处理流程示意图: Shell既然是工作在Linux内核之上,那我们也有必要知道下Linux相关知识. Linux是一套免费试用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统. 1983年9月27日,Richard Stallman(理查德

第一章 Python基础知识

1.1 介绍  1.1.1 特点 Python是一种面向对象.解释型计算机程序设计语言.语法简洁清晰,强制用空白符作为语句缩进. Python具有丰富和强大的库,又被称为胶水语言.能把其他语言(主要C/C++)写的模块很轻松的结合在一起. 1.1.2 应用领域 Web网站:有很多优秀的开源Web框架,比如Django(最流行).Tornado(轻量级.异步).Flask(微型).Web.py(简单)等. 数据采集:有好用的http库,比如urllib2.requests等.还有高级的屏幕爬取及网