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

    第五周 加分题-mybash的实现

    使用fork,exec,wait实现mybash

    • 产品代码
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <unistd.h>
    #include <string.h>
    #define DELAY 2
    void child_code(int delay,char *arglist[3])
    {
    	printf("child %d here will sleep for %d seconds
    ",getpid(),delay);
    	sleep(delay);
    	execvp("who",arglist);
    	printf("child done. about to exit
    ");
    	exit(17);
    }
    void parent_code (int childpid)
    {
    	int wait_rv=0;
    	wait_rv = wait(NULL);
    	printf("done waiting %d .wait returned :%d
    ",childpid,wait_rv);
    }
    int main()
    {
    	char s1[5],s2[5];
    	scanf("%s%s",s1,s2);
    	char *arglist[3];
    //	strcpy(arglist[0],s1);
    //	strcpy(arglist[1],s2);
    	arglist[0]="who";
    	arglist[1]="-a";
    	arglist[2]=0;
    	printf("%s",arglist[2]);
    	int newpid;
    	printf("before:mypid is %d 
    ",getpid());
    	if((newpid = fork())==-1)
    		perror("fork");
    	else if(newpid==0)
    		child_code(DELAY,arglist);
    	else parent_code(newpid);
    	return 0;
    		
    }
    
    
    • 测试代码
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <unistd.h>
    #include <string.h>
    #define DELAY 2
    void child_code(int delay,char *arglist[3])
    {
    	printf("child %d here will sleep for %d seconds
    ",getpid(),delay);
    	sleep(delay);
    	execvp("ls",arglist);
    	printf("child done. about to exit
    ");
    	exit(17);
    }
    void parent_code (int childpid)
    {
    	int wait_rv=0;
    	wait_rv = wait(NULL);
    	printf("done waiting %d .wait returned :%d
    ",childpid,wait_rv);
    }
    int main()
    {
    	char s1[5],s2[5];
    	scanf("%s%s",s1,s2);
    	char *arglist[3];
    //	strcpy(arglist[0],s1);
    //	strcpy(arglist[1],s2);
    	arglist[0]="ls";
    	arglist[1]="-a";
    	arglist[2]=0;
    	printf("%s",arglist[2]);
    	int newpid;
    	printf("before:mypid is %d 
    ",getpid());
    	if((newpid = fork())==-1)
    		perror("fork");
    	else if(newpid==0)
    		child_code(DELAY,arglist);
    	else parent_code(newpid);
    	return 0;
    		
    }
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <unistd.h>
    #include <string.h>
    #define DELAY 2
    void child_code(int delay,char *arglist[3])
    {
    	printf("child %d here will sleep for %d seconds
    ",getpid(),delay);
    	sleep(delay);
    	execvp("ls",arglist);
    	printf("child done. about to exit
    ");
    	exit(17);
    }
    void parent_code (int childpid)
    {
    	int wait_rv=0;
    	wait_rv = wait(NULL);
    	printf("done waiting %d .wait returned :%d
    ",childpid,wait_rv);
    }
    int main()
    {
    	char s1[5],s2[5];
    	scanf("%s%s",s1,s2);
    	char *arglist[3];
    //	strcpy(arglist[0],s1);
    //	strcpy(arglist[1],s2);
    	arglist[0]="ls";
    	arglist[1]="-l";
    	arglist[2]=0;
    	printf("%s",arglist[2]);
    	int newpid;
    	printf("before:mypid is %d 
    ",getpid());
    	if((newpid = fork())==-1)
    		perror("fork");
    	else if(newpid==0)
    		child_code(DELAY,arglist);
    	else parent_code(newpid);
    	return 0;
    		
    }
    
    

    实现结果截图

    image

  • 相关阅读:
    bzoj 3779 重组病毒——LCT维护子树信息
    bzoj 4010 [HNOI2015]菜肴制作——贪心
    bzoj 2535 && bzoj 2109 [Noi2010]Plane 航空管制——贪心
    bzoj 3671 [Noi2014]随机数生成器——贪心(时间复杂度分配)
    bzoj 2395 [Balkan 2011]Timeismoney——最小乘积生成树
    bzoj 3157 && bzoj 3516 国王奇遇记——推式子
    bzoj 1101 [POI2007]Zap——反演
    hdu 4372 Count the Buildings——第一类斯特林数
    bzoj 2406 矩阵——有源汇上下界可行流
    bzoj 2039 [2009国家集训队]employ人员雇佣——二元关系
  • 原文地址:https://www.cnblogs.com/tyn5304/p/7700166.html
Copyright © 2011-2022 走看看