c/c++语言开发共享C:execv之前的dup2()

对于家庭作业,我必须编写一个基本的shell,包括重定向。 该程序使用readline来提示输入,解析输入字符串,并将其分解为可执行文件名,参数和输入/输出文件(如果适用)。 在解析字符串之后,它将forx和子execv()传递给传入的可执行文件。我使用dup2()在fork之后和execv之前更改文件描述符,但是一旦遇到问题我就会遇到问题程序已执行新的可执行文件。 如果在我的shell中我运行ls > foo.out ,我得到: ls: cannot access H y A $ L H) I $ : No such file or directory

构建c-> argv:

 char *args[6]; int i; for(i=0;i<=4;i++){ char *_arg=strsep(&_str_cmd," "); printf("Found _arg: %sn",_arg); // If there is an argument and it is not blank if(_arg && strcmp(_arg,"")!=0){ if(strcmp(_arg,"")==0){ _cmd.outfile=strsep(&_str_cmd," "); i--; continue; } } else{break;} } args[i]=(char*)0; _cmd.binary=args[0]; memcpy(_cmd.argv,args,sizeof _cmd.argv); 

    你是如何构建c->argv ? 它必须是一个NULL -terminated char *数组。 你很可能错过了终结者。


    在您的代码处理<...>... ,您跳过argv的条目,使其保持未初始化状态。

      以上就是c/c++开发分享C:execv之前的dup2()相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549389.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐