【问题标题】:C programming usin cmd prompt on windows在 Windows 上使用 cmd 提示符进行 C 编程
【发布时间】:2017-06-05 11:12:15
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(){
    char command[20];

    system("dir");

    while(1){
    printf("\n\n");
    scanf("%s", &command);
    system(command);
    }

    return 0;
}

这是我的代码,它是一个用 C 编写的控制台应用程序,我希望能够控制我的计算机的 cmd 提示符,每当我运行像 cd.. 这样的新命令时,路径总是回到原来的位置,如何我让它像一个过程吗?抱歉,我是新手。

【问题讨论】:

  • 我想这应该是一个骗局,但找不到。

标签: c system


【解决方案1】:

你不能。

典型命令行解释器中的cd 命令是一个内部命令,即内置在命令解释器本身中。这是因为当前目录是进程本身的属性,子进程(在大多数情况下是system() 创建的)不能更改其父进程的当前目录。

【讨论】:

  • +1,当然,你可以:编写一个命令行解析器,它处理像cd本身这样的“内置”并使用CreateProcess()转发其他任何东西(在 Windows 上,或在 *nix 系统上 fork()/execlp())。 IOW,创建你自己的cmd.exe (aka shell) ;)
【解决方案2】:

您需要自己做:将cd 传递给system(...) 将不再有效,因为您自己的代码在命令shell 的控制下运行,该命令认为当前目录就是它当时的样子你开始运行你的程序了。

命令外壳cmd 的工作是跟踪当前目录。由于您正在编写命令 shell,因此您需要跟踪目录树中的当前位置。

您还需要将位置传递给正在运行的每个命令。不过,这项任务变得非常棘手 - 远远超出了简单的传递代码。

【讨论】:

    【解决方案3】:

    我使用了一个小技巧,效果很好。假设您要启动位于"C:/Program Files" 的应用程序。

    const char applicationPath[] = "cd C:/Program Files/App&&";
    
    bool sytemCallsToApp(void) {
        char cmd[200] = "";
        strcpy(cmd, applicationPath); // cmd to access app
        strcat(cmd, "app.exe");
        strcat(cmd, "&&HERE YOUR NEXT COMMAND"); // This command will be concatenated after the && thus executed just after cd
        if (system(cmd) != 0)
            return false; // If failed exit
    
        // Use strcpy to modify the content of cmd[]
        // Use strcat to add instructions to cmd
        // Add && when you want to execute multiple cmd in one system call
        // Don't forget system() returns values depending of your calls. It'd be wise to check them.
        return true;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 2012-11-23
      • 1970-01-01
      相关资源
      最近更新 更多