C 在命令函数中保持状态
我做了一个函数,你可以从中得到命令的输出。它可以工作,但不会保留上一个命令的状态,例如,如果更改目录(cd dir),则在新命令中不会更改它。是否可以更改该函数,以便在下一个命令中更改目录时保留该函数?这是我的职责:C 在命令函数中保持状态,c,command,C,Command,我做了一个函数,你可以从中得到命令的输出。它可以工作,但不会保留上一个命令的状态,例如,如果更改目录(cd dir),则在新命令中不会更改它。是否可以更改该函数,以便在下一个命令中更改目录时保留该函数?这是我的职责: int execute(char *command, char *output) { int rc; char buffer[4096], *cmd; DWORD byte, bytes;
int execute(char *command, char *output)
{
int rc;
char buffer[4096], *cmd;
DWORD byte, bytes;
HANDLE in_read, in_write, out_read, out_write;
PROCESS_INFORMATION pi;
SECURITY_ATTRIBUTES sa;
STARTUPINFO si;
cmd = malloc(sizeof(char) * (strlen(command) + 8));
strcpy(cmd, "cmd /c ");
strcat(cmd, command);
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
ZeroMemory(&si, sizeof(STARTUPINFO));
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
rc = CreatePipe(&out_read, &out_write, &sa, 0);
check(rc != 0)
rc = SetHandleInformation(out_read, HANDLE_FLAG_INHERIT, 0);
check(rc != 0)
rc = CreatePipe(&in_read, &in_write, &sa, 0);
check(rc != 0)
rc = SetHandleInformation(in_write, HANDLE_FLAG_INHERIT, 0);
check(rc != 0)
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdError = out_write;
si.hStdOutput = out_write;
si.hStdInput = in_read;
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
rc = CreateProcess(NULL, cmd, NULL, NULL, TRUE, CREATE_NO_WINDOW,
NULL, NULL, &si, &pi);
check(rc != 0)
CloseHandle(out_write);
bytes = 0;
while (ReadFile(out_read, &buffer, 4096, &byte, NULL)) {
if (bytes == 0) {
bytes = bytes + byte;
check(bytes > sizeof(output))
strcpy(output, buffer);
ZeroMemory(&buffer, sizeof(buffer));
} else {
bytes = bytes + byte;
check(bytes > sizeof(output))
strcat(output, buffer);
ZeroMemory(&buffer, sizeof(buffer));
}
};
CloseHandle(in_read);
CloseHandle(in_write);
CloseHandle(out_read);
free(cmd);
return 1;
error:
free(cmd);
return -1;
}
CreateProcess
启动一个独立于您的流程运行的全新流程
如果您使独立进程更改其自己的当前工作目录,那么它将仅在新进程中更改,而不会在运行程序的进程中更改