当前位置: 技术问答>linux和unix
求助一道linux C语言的错误问题
来源: 互联网 发布时间:2016-09-05
本文导语: 本帖最后由 zachary1984 于 2010-06-22 20:39:28 编辑 linux下编写C程序:在屏幕上显示提示符(prompt),接受从键盘输入,将从键盘输入的命令转化成(生成)新的进程,并且执行(运行)的这么一个程序。simplesh 如下: $ ./...
如下:
$ ./simplesh
PROMPT>
PROMPT> date
Wed May 27 0:30:10 JST 2009
PROMPT> ls
…
要点:
1.根据下面所示,使用fork,在子进程使用exec系统调用,将子进程置换成输入的命令的进程
int pid;
if ((pid = fork()) == 0) {
/* 子进程的处理*/
} else if (pid >= 1) {
/* 父进程的处理*/
} else {
/* 错误处理*/
}
---------------------------------------------------------
下面是朋友写的代码,但是编译出错,请高手帮忙看一下
#include
#include
#include
#include
int main()
{
int pid;
char cmd[100] = {0};
char* ptr;
while(1)
{
ptr = cmd;
//输入prompt
printf("PROMPT>");
//判断是否输入空格
while((*(ptr++)=getchar())!='n');
*ptr = 0;
//输入q,退出
if(!strcmp(cmd,"qn"))
{
printf("exitn");
return 0;
}
if ((pid = fork()) == 0)
{
exec(cmd);
return 0;
}
else if (pid >= 1)
{
//等待子进程退出
waitpid(-1, NULL,0);
}
else
{
puts("error");
return -1;
/* 错误处理*/
}
}
}
|
代码给你放上吧
你的这个程序不能处理函数,参看我给你写的那个流程,对参数的处理要用
getopt()。
#include
#include
#include
#include
int main()
{
int pid;
char cmd[100] = {0};
char* ptr;
while(1)
{
ptr = cmd;
printf("PROMPT>");
gets(ptr); //这个函数不让用会有警告,换成fgets就行了
/*while((*(ptr++)=getchar())!='n');
*ptr = 0;*/ //这两句执行完后cmd是空的,不信你puts下ptr
if(!strcmp(cmd,"qn"))
{
printf("exitn");
return 0;
}
if ((pid = fork()) == 0)
{
if(execlp(ptr," ",(char*)0) == -1) //不明白的直接谷歌exec函数族
puts("execvp error!n");
return 0;
}
else
if (pid >= 1)
{
waitpid(pid,NULL,0);
}
else
{
puts("error");
return -1;
}
}
return 0;
}
|
没有exec(cmd)
不过可以用system(cmd)
不知道你编码的目地是什么
要说明一点的是,system其实就是fork+exec的封装
如果单纯是为了应用,不需要你再fork了
不过可以用system(cmd)
不知道你编码的目地是什么
要说明一点的是,system其实就是fork+exec的封装
如果单纯是为了应用,不需要你再fork了