zoukankan      html  css  js  c++  java
  • 第五周加分题--mybash的实现

    第五周加分题--mybash的实现

    题目要求

    1.使用fork,exec,wait实现mybash

    2.写出伪代码,产品代码和测试代码

    3.发表知识理解,实现过程和问题解决的博客(包含代码托管链接)

    通过man命令了解fork、exec和wait

    • fork

    返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记;否则,出错返回-1。

    • exec

    系统调用execve()对当前进程进行替换,替换者为一个指定的程序,其参数包括文件名(filename)、参数列表(argv)以及环境变量(envp)。

    • wait

    等待子进程中断或结束

    编程

    • 伪代码
    int main(){
    
    从终端读取要执行的命令
    fork()产生子进程执行此命令
    如果exec函数返回,表明没有正常执行命令,打印错误信息perro()
    父进程, 等待子进程结束,并打印子进程的返回值wait(&rtn) 
    
    }
    
    • 产品代码
    #include <errno.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <limits.h>
    
    void main()
    {
            
        char *command[3];
        command[0] = "ls";
        command[1] = "-l";
        command[2] = 0;
            
            int s,i=0;
            int rtn; 
            printf( ">" );
        //printf("%s %s %s",command[1],command[2],command[3]);  
        printf("%s",command[0]);
        i=0;    
        s=fork();
        if ( s== 0 ) {
        //printf("%d
    ",s);
        execvp( command[0], command );
        
        //perror( command );
        
        exit( errno );
         }
         else {
        
        //printf("%d
    ",s);
    
        wait ( &rtn );
        
        printf( " child process return %d
    ", rtn );
        
        }
        
        
        }
    

    测试并运行

  • 相关阅读:
    POJ 2057 The Lost House
    SRM 597
    poj3020(Antenna Placement)
    poj3041(Asteroids)
    poj2388(Who's in the Middle)
    poj3687(Labeling Balls)
    poj1094(Sorting It All Out)
    poj3026(Borg Maze)
    poj1258(Agri-net)
    poj2485(Highways)
  • 原文地址:https://www.cnblogs.com/lsqsjsj/p/7995064.html
Copyright © 2011-2022 走看看