我是学生,正在尝试编写一个简单的程序用于学习目的。我写了以下程序:
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid;
pid = fork();
if(pid < 0)
{
fprintf(stderr,"Fork failed\n");
return -1;
}
if(pid > 0)
{
printf("parent\n");
}
if(pid == 0)
{
char* args[] = {"/usr/bin/tr","[:lower:]","[:upper:]", NULL };
execvp("/usr/bin/tr",args);
fprintf(stderr,"Error in exec\n");
}
return 0;
}
但我甚至无法运行这个简单的程序。我得到的输出是:
parent
/usr/bin/tr: read error: Input/output error
使用execv运行时,无法从标准输入获取输入吗?请帮忙。
答案 0 :(得分:0)
您的问题是父进程已终止并关闭了标准输入。
添加
wait(pid);
到父代码,让它等待孩子退出。