利用C语言编写程序启动一个新的进程,Windows:在进程中启动计算器应用程序(calc.exe),或者Linux:在进程中启动编辑器应用程序(vi)。
时间: 2024-10-24 08:07:29 浏览: 30
在C语言中,为了在Windows下启动计算器(calc.exe)或Linux下的编辑器(如vi),你需要使用操作系统提供的API来创建子进程并传递命令行参数。这里分别给出两个平台的例子:
**Windows (通过CreateProcess函数)**
```c
#include <windows.h>
int main() {
STARTUPINFO si = {0};
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW; // 设置窗口显示标志
si.wShowWindow = SW_HIDE; // 隐藏窗口
ZeroMemory(&pi, sizeof(pi));
// 要启动的进程路径和参数
TCHAR cmd[MAX_PATH] = "C:\\Windows\\System32\\calc.exe";
if (!CreateProcess(cmd, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
printf("Failed to start calculator.\n");
return 1;
}
WaitForSingleObject(pi.hProcess, INFINITE); // 等待进程结束
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
```
**Linux (通过fork+execve函数)**
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
int main() {
pid_t child_pid;
char *cmd[] = {"vim", "-q", "/dev/null", NULL};
child_pid = fork();
if (child_pid == 0) { // 子进程
execvp(cmd[0], cmd); // 执行指定的编辑器
perror("execvp failed");
exit(EXIT_FAILURE);
} else if (child_pid > 0) { // 父进程
printf("Editor started with PID %d\n", child_pid);
} else { // fork失败
perror("fork failed");
exit(EXIT_FAILURE);
}
return 0;
}
```
阅读全文