当前位置: 技术问答>linux和unix
一个小问题的迷惑
来源: 互联网 发布时间:2016-12-06
本文导语: #include #include #include #include int main(void) { char buf[256],*cmd,*vec[128],*infile,*outfile; int n,sv; for(;;) { printf("=> "); if(fgets(buf,sizeof buf,stdin) == NULL) exit(0); infile = strstr(buf,""); if(infile) { *infile = ''; infile = strtok(...
#include
#include
#include
#include
int main(void)
{
char buf[256],*cmd,*vec[128],*infile,*outfile;
int n,sv;
for(;;)
{
printf("=> ");
if(fgets(buf,sizeof buf,stdin) == NULL)
exit(0);
infile = strstr(buf,"");
if(infile)
{
*infile = '';
infile = strtok(infile + 1," tn");
}
if(outfile)
{
*outfile = '';
outfile = strtok(outfile + 1," tn");
}
cmd = strtok(buf," tn");
if(cmd)
{
if(strcmp(cmd,"exit") == 0) exit(0);
n = 0;
vec[n++] = cmd;
while(vec[n++] = strtok(NULL," tn"));
if(fork() == 0)
{
int fd0 = -1,fd1 = -1;
if(infile) fd0 = open(infile,O_RDONLY);
if(fd0 != -1) dup2(fd0,0);
close(fd0);
if(outfile) fd1 = open(outfile,O_CREAT | O_WRONLY,0666);
if(fd1 != -1) dup2(fd1,1);
close(fd1);
execvp(cmd,vec);
fprintf(stderr,"** ERROR: %sn",strerror(errno));
exit(1);
}
wait(&sv);
}
}
return 0;
}
//书上的一个例子,实现重定向,为啥其他的命令似乎没问题,
//但是执行 cd /目录 时,总是提示:没有该目录,求解.
|
cd是内置命令,也就是说是shell提供的功能而不是某个可执行文件,
你这个程序虚拟一个shell,实际上是执行某个可执行文件,而cd命令并没有对应的可执行文件,所以提示说找不到该文件(是说找不到cd,不是找不到/目录)
whereis命令可以看到某个命令对应的可执行文件在哪里
如:whereis ls的输出可以看到ls对应的可执行文件是/bin/ls
恩。。。不知道说明白了没
你这个程序虚拟一个shell,实际上是执行某个可执行文件,而cd命令并没有对应的可执行文件,所以提示说找不到该文件(是说找不到cd,不是找不到/目录)
whereis命令可以看到某个命令对应的可执行文件在哪里
如:whereis ls的输出可以看到ls对应的可执行文件是/bin/ls
恩。。。不知道说明白了没
|
不要 目录前面的 / 吗?
|
光看看就觉得很迷惑.......
|
感觉就是自己查找自己 呵呵