2016-03-10 111 views
0

当执行这一块操作系统代码我收到信息“退出值255”。我通过键盘接收命令,并且我得到了字符串正确的信息。当我收到错误信息时,程序不显示(例如)键盘接收到的ls -lc WEXITSTATUS()退出255

printf("Command? "); 
    scanf(" %99[^\n]", str); 

    p = fork(); 
     if(p > 0){ //Dad wait for the child 
      wait(&status); 
      if(WIFEXITED(status)){ 
       printf("%d\n",WEXITSTATUS(status)); 
      } 
     }else{  //Child execute the execlp 
      execlp(str, str,NULL); 
      exit(-1); 
     } 

谢谢! Mark

+1

'exit -1;'是原因。顺便说一句:你进入scanf()行到底是什么?注意:'ls -l'不是一个程序。 'ls'是。 – wildplasser

+0

1)是的,现在帮助过程有一个状态= 1这是很好的! 2)所以...我不能在execlp中使用ls -l? – Mark

回答

1

execlp()期望参数被分开;你的字符串输入ls -l不是有效的现有的可执行程序:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/wait.h> 

char *args[] = { "ls", "-l" }; 
// int main (int argc, char **argv) 
int main (void) 
{ 
int p; 
int status; 

p = fork(); 
if(p > 0){ //Dad wait for the child 
    wait(&status); 
    if (WIFEXITED(status)){ 
     printf("%d\n", WEXITSTATUS(status)); 
     } 
    }else{  //Child execute the execlp 
     execlp(args[0], args[0], args[1] ,NULL); 
     exit (-1); 
    } 

exit (0); 
} 

还要注意的是exit(-1)(除了是无效的:你应该使用EXIT_FAILURE)产生0xaaaaaaFF的出口结果;只有较少的(8)位用于实际出口值;较高的位被用于退出的原因等等。 - >>查看WEXITSTATUS()的定义和<sys/wait.h>的朋友。

+0

工作非常感谢;)! – Mark

相关问题