我正在尝试编写一个简单的shell程序,并对非内置命令的文件redirect有问题。 例如,./a.out <out> outfile,会让用户编译的程序a.out从infile获取input,并将其输出输出到outfile,而不是通常使用的stream。 当我遇到一个非内置的命令,我分叉一个新的进程,并覆盖一个新的图像与提供的参数。 一般格式是命令arg1 arg2 … argn <infile> outfile。 所以args(arg1到argn)会被传递到新的镜像中,input和输出将会被转换成infile和outfile这是我的分叉过程的一个片段。
pid = fork(); if (pid < 0) { fprintf(stderr,"*** fork error ***n"); } else if (pid == 0) { execvp(command,args); } waitpid(pid,&status,0);
有一个unix命令,可以让我这样做吗? 我也在想,有可能有一种方法来改变新的形象中的标准input和标准输出? 任何链接或信息将不胜感激。
PHP的共享内存读取全0
使用命名和未命名的信号量
visual studio不能识别版本10.0.14393.0中的Windows 10 sdk
计划Windows任务与C#编程
我如何给Linux写文件权限?
在Unix上,你通常需要dup2 。 请参阅libc文档复制文件描述符。
在分叉的过程中,在exec新映像之前,关闭文件句柄0(标准输入),1(标准输出)和可能的2(标准错误)。
然后使用open()以正确的顺序打开必要的文件(stdin,out和err)。 他们将使用文件句柄表中的第一个条目 – 0,1和2.因此,从现在开始,您打开的第一个文件将被视为stdin 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。