2.利用C语言编写程序启动一个新的进程,W indows:在进程中启动计算器应用程序-|||-(calc.exe),或者Linux:在进程中启动编辑器应用程序(vi)。
时间: 2024-10-24 19:17:46 浏览: 16
在Windows上,你可以使用CreateProcess函数从C语言中启动计算器应用程序。首先,你需要包含Windows API头文件`windows.h`,然后按照以下步骤操作:
```c
#include <windows.h>
int main() {
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.lpDesktop = L"DESKTOP";
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow = SW_SHOW; // 显示窗口
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE); // 输入句柄
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); // 输出句柄
si.hStdError = GetStdHandle(STD_ERROR_HANDLE); // 错误句柄
ZeroMemory(&pi, sizeof(pi));
if (CreateProcess(TEXT("calc.exe"), NULL, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi)) {
printf("Calculator process started with PID %d\n", pi.dwProcessId);
CloseHandle(pi.hThread); // 关闭线程句柄
WaitForSingleObject(pi.hProcess, INFINITE); // 等待进程结束
CloseHandle(pi.hProcess); // 关闭进程句柄
} else {
printf("Failed to start calculator.\n");
}
return 0;
}
```
在这个例子中,`CreateProcess`创建了一个新的进程并运行了`calc.exe`。
而在Linux上,你可以使用`fork()`和`execve()`系统调用来启动vi编辑器。这里假设已经包含了必要的头文件`unistd.h`:
```c
#include <unistd.h>
#include <stdio.h>
int main() {
pid_t child_pid = fork(); // 创建子进程
if (child_pid == 0) { // 子进程
execlp("vi", "vi", "-u", NULL); // 执行vi命令
perror("Failed to execute vi");
exit(1);
} else {
printf("Editor process started with PID %d\n", child_pid);
wait(NULL); // 父进程等待子进程完成
}
return 0;
}
```
在这个示例中,`execlp`函数用于替换当前进程,执行指定的编辑器`vi`命令。
阅读全文