Chinaunix

标题: 有关chdir和fchdir的问题请教[已解决] [打印本页]

作者: 漫游云巅    时间: 2012-12-17 21:28
标题: 有关chdir和fchdir的问题请教[已解决]
本帖最后由 crazyhadoop 于 2012-12-18 17:09 编辑

chdir("/home")可以改变目录,但是我想“/home”直接在键盘上输入,该如何处理。
目前找的2个方法:
1、用chdir:
int main()
    {char p;
    scanf("%s",&p);
    chdir(&p)
    }
可以实现改变,但我不了解为什么chdir(&p)能生效,我改成chdir(p)就不行呢?
2、用fchdir。这个可以从文件描述符输入。
但是为什么不支持STDIN_FILENO,也就是fchdir(0),为什么不能实现从键盘输入呢?

退而求其次,我不从键盘输入,建立一个文件名1.txt,内容是/home,然后
    {int m;
    m=open("1.txt",O_RDONLY);   //m=open("/home",O_RDONLY);可以实现,但为什么前面不行?
    fchdir(m);
    }
为什么也不能改变目录呢。

希望高手能帮忙解答下。谢谢了。
作者: crazyhadoop    时间: 2012-12-17 23:47
你那个且只有一个字节,能存什么?
m 内容是文件描述符,又不是/home
作者: 漫游云巅    时间: 2012-12-18 11:37
谢谢版主。自己又看了下
1、chdir格式是int chdir(const char *path),只能输入此类型
2、文件描述符理解不对,只是记录打开的文件,不能记录其内容。
但是我这样编写,为什么还是不对呢?
#include <unistd.h>
#include <stdio.h>
int main()
{
    char buf[80];
    char bz[80];
    read(0,bz,sizeof(bz));
    chdir(bz);
    printf("current working directory : %s\n", getcwd(buf, sizeof(buf)));
}
这样就能键盘输入了,但是结果仍然不对啊,我输入/home,但仍然输出当前目录。
作者: crazyhadoop    时间: 2012-12-18 12:16
bz这个参数传的不对吧?

bz[strlen(bz)-1] = '\0';
chdir(bz);

再试试
作者: 漫游云巅    时间: 2012-12-18 12:47
谢谢版主,明白了.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2