2013-10-20 54 views
0

我遇到了execvp和fork问题。当我运行代码时,即使在创建文件时,exec也不起作用。它只是返回一个“错误的地址”错误。另外,printf(“在孩子中”)在我运行时不会出现。我的代码如何在不打印“在孩子中”的情况下进入execvp?错误与fork,execvp在C?

 pid = fork(); 
    switch(pid) { 
    case -1: 
     fprintf(stderr,"ERROR WITH FORK\n"); 
     exit(1); 
     break; 

    case 0: 
     printf("in the child"); 
     fd = open(filename,O_CREAT | O_APPEND,0777); 
     if(dup2(fd,1) < 0) 
     { 
      fprintf(stderr,"dup error: %s",strerror(errno)); 
     } 

     if(execvp(command,args) == -1) //is null terminated 
     { 
      fprintf(stderr,"exec error %s\n",strerror(errno)); 
     } 

     break; 

    default: 
     wait(NULL); 
     break; 
+0

缓冲,冲洗等添加一个换行符。 –

+0

我不明白你在说什么。文件被创建,所以文件名字符串如果格式正确与空。我需要一个能够让我的代码工作的换行符?你在说什么缓冲区? – user2900984

+0

'printf'中的缓冲区。让它在孩子\ n“'中打印'”来查看输出。 –

回答

0

指针的阵列(在execvp()第二参数)必须由NULL指针被终止。在args的末尾附加0NULL