Linux中C语言编程的execv用法

kimi 2008-09-08 10:52:37
我想用C语言设计个类似linux的bash的命令解释器,要求在linux下运行,其中有个问题一直没弄懂,请高手看这段代码:

#include<stdio.h>
#include<unistd.h>

main(){
Scanf("%s",name);
int pid;
pid=fork();
if(pid==0)
execv(name,0);
}

为什么不能执行比如dir,ls等linux下的外部命令呢?请各位高手赐教,谢谢!

如果熟悉用子进程来调用execv的都可以来说说,或者发点参考代码<Linux下的C编程>
...全文
4756 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
godfrey90 2011-04-02
  • 打赏
  • 举报
回复
学习一下
kimi 2008-09-09
  • 打赏
  • 举报
回复
Thanks .
puzzlesky 2008-09-09
  • 打赏
  • 举报
回复
不懂,学习了
K行天下 2008-09-09
  • 打赏
  • 举报
回复
建议你 man 一下,有详细介绍
给个例子

#include <stdio.h>
main(int argc,char *argv[])
{
if(argc==1)
printf("too short");
execv(argv[1],&argv[1]);
printf("sorry .......");
}

goodluckyxl 2008-09-09
  • 打赏
  • 举报
回复
mkdir execv你下本linux api的上面说的会很清楚有例子的
gezichong 2008-09-08
  • 打赏
  • 举报
回复
LZ的函数调用有误.

gezichong 2008-09-08
  • 打赏
  • 举报
回复
function prototype:
int execv(const char *pathname, char *const argv []);

example:
char *exec_argv[4];
exec_argv[0] = "telnet";
exec_argv[1] = ip;
exec_argv[2] = port;
exec_argv[3] = NULL;

if (execv("/bin/telnet", exec_argv) == -1)
{
//do some thing
}

柯本 2008-09-08
  • 打赏
  • 举报
回复
你的程序参数不对.这样改就可以了

#include <stdio.h>
#include <unistd.h>
#include <errno.h>

main(){
char name[200];
int r;
int pid;

char *v[] = { (char *) 0 };



scanf("%s",name);
pid=fork();
if(pid==0)
if((r=execv(name,v))==-1)
perror("error:");
}

weiyijiji 2008-09-08
  • 打赏
  • 举报
回复
int execv (const char * path, char * const argv[ ]);
#include<unistd.h>
main()
{
char * argv[ ]={“ls”,”-al”,”/etc/passwd”,(char*) }};
execv(“/bin/ls”,argv);
}

  • 打赏
  • 举报
回复
UNIX环境高级编程

上直接就有源码啊
weiyijiji 2008-09-08
  • 打赏
  • 举报
回复
看看execv的函数原形.第1个参数是路径名,即你想执行命令的执行文件的地址,第2个参数为1个指针数组,包含你完整的执行命令.

ChamPagneZ 2008-09-08
  • 打赏
  • 举报
回复

//是《UNIX环境高级编程》中的第一章的例子,你去看看.
老紫竹 2008-09-08
  • 打赏
  • 举报
回复
来错地方了,我替你挪到C的版面去!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧