【问题标题】:C program changing directoriesC程序更改目录
【发布时间】:2018-02-21 12:29:20
【问题描述】:

您好,我正在编写一个 C 程序,我是新手,我使用 system 来运行命令,但每当我输入 cd.. 时,它会显示正确的目录,但它总是留在那里。

int main(){

char command[20];

    while(1){
       scanf("%s", &command); //typing in cd..
       //it returns "C:\Program Files (x86)\Google\Drive\"
       system(command);
    }
}

我再次输入相同的内容,它似乎仍然在同一个目录中。如何使用 system 更改 C 中的目录?

【问题讨论】:

  • 每个人都使用system 而不是正确的调用,这是怎么回事? man chdir
  • 嗯,有趣的是,没有办法用系统做到这一点吗?我会检查链接谢谢@spectras
  • 只是system 是一个hack,任何严肃的程序都不应该像以前那样使用它。它产生一个或多个外部进程,初始化它们,让它们解析命令并运行它,然后等待操作系统清理它们,所有这些都是繁重的操作,而您的程序可以完美地完成这项工作,快速有效地只需直接使用您启动的程序最终执行的实际调用。更不用说它本质上不是跨平台的(取决于可用的命令)并且可能很容易行为不端(如果我在您的程序旁边以名称 cd.exe 复制病毒怎么办?)
  • 在你的情况下,你可能想要SetCurrentDirectory
  • 至于你所做的事情不起作用的实际原因,因为它产生了一个外部进程,所以更改目录的是外部进程,而不是你的。你的等待直到外部进程开始,改变它自己的当前目录,完成然后恢复。

标签: c command


【解决方案1】:

您可以在程序中使用名为“chdir”的 Linux 系统函数。 'chidr' 可以在程序运行时改变程序当前目录。

程序在运行时会是一个linux的进程。系统会将环境变量复制到这个进程中。在这些环境变量中,一个名为 PWD 的变量仍然是进程的当前目录路径。因此,您可以使用以下程序显示所有环境变量的值:

   #include <stdlib.h>
   #include <stdio.h>
   extern char **environ;
   int main()
   {
       char **env = environ;
      //show the current directory path
      printf("PWD: %s\n", getenv("PWD"));
      //show all environment variables.
       while(*env)
       {
           printf("%s\n",*env);
           env++;
       }
    return 0;
   }

因此,您可以通过调用名为“chdir”的系统函数来更改变量“PWD”的值,并通过调用名为“getenv”的系统函数来显示当前路径。 另外,您可以使用以下shell commond显示环境变量的详细信息:

man 7 environ

如果你不知道如何使用“chdir”功能,可以使用下面的shell常用行来获取帮助:

man chdir

【讨论】:

    猜你喜欢
    • 2014-03-02
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2015-02-22
    • 2011-10-18
    • 1970-01-01
    • 2011-05-20
    • 2013-04-02
    相关资源
    最近更新 更多