在windows上使用cmd提示符进行C编程 #包括 #包括 #包括 #包括 int main(){ char命令[20]; 系统(“dir”); 而(1){ printf(“\n\n”); scanf(“%s”,命令(&C); 系统(指挥部); } 返回0; }
这是我的代码,这是一个用C编写的控制台应用程序,我希望能够控制我的计算机的cmd提示符,每当我运行新命令,如在windows上使用cmd提示符进行C编程 #包括 #包括 #包括 #包括 int main(){ char命令[20]; 系统(“dir”); 而(1){ printf(“\n\n”); scanf(“%s”,命令(&C); 系统(指挥部); } 返回0; },c,system,C,System,这是我的代码,这是一个用C编写的控制台应用程序,我希望能够控制我的计算机的cmd提示符,每当我运行新命令,如cd..路径总是回到它以前的位置,我如何使它像一个进程?对不起,我是新手。你不能 典型命令行解释器中的cd命令是一个内部命令,即内置于命令解释器本身。这是因为当前目录是进程本身的一个属性,而子进程(在大多数情况下是system()创建的)无法更改其父进程的当前目录。您需要自己执行此操作:将cd传递到system(…)将不再起作用,因为您自己的代码是在命令shell的控制下运行的,它相信当前
cd..
路径总是回到它以前的位置,我如何使它像一个进程?对不起,我是新手。你不能
典型命令行解释器中的
cd
命令是一个内部命令,即内置于命令解释器本身。这是因为当前目录是进程本身的一个属性,而子进程(在大多数情况下是system()
创建的)无法更改其父进程的当前目录。您需要自己执行此操作:将cd
传递到system(…)
将不再起作用,因为您自己的代码是在命令shell的控制下运行的,它相信当前目录就是您开始运行程序时的目录
它是命令shell的一项任务,cmd
,用于跟踪当前目录。由于您正在编写命令shell,因此需要跟踪目录树中的当前位置
您还需要将位置传递给正在运行的每个命令。不过,这项任务变得非常棘手,远远超出了简单的传递代码。我使用了一个小技巧,效果很好。让我们想象一下,您想启动一个位于
“C:/Program Files”
中的应用程序
我想这应该是一个副本,但找不到任何副本。+1,当然,您可以:编写一个命令行解析器,它可以处理像
cd
本身这样的“内置项”,并使用CreateProcess()
(在windows上,或在*nix系统上fork()
/execlp()
)转发任何其他内容。现在,创建自己的cmd.exe
(又名shell);)
#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;
}
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;
}