いくつかのプロセスを実行し、それらの ID を表示するプログラムがあります。
主な機能:
int main(void){
char code[25];
bool testCmd = false;
DWORD arrProcessID[10];
char *fullCmd;
char *parameter;
char *command;
char *extraCmd;
int loop = 1;
while (loop == 1){
printf("C:\\>");
scanf("%[^\n]",code);
fullCmd = strdup(code);
command = strtok(fullCmd, " ");
extraCmd = strtok(NULL, " ");
parameter = strtok(NULL, " ");
if ((strcmp(command, "list") == 0) || (strcmp(command, "LIST") == 0)){
if (extraCmd != 0){
printf("%s is not recognized as an internal or external command, operable program or batch file. \n", code);
} else {
printf("ID process is running: \n");
printf("%d \n",sizeof(arrProcessID));
for(int i=0; i<sizeof(arrProcessID); i++){
printf("%d : %lu \n", i, arrProcessID[i]);
}
}
}
if ((strcmp(command, "install") == 0) || (strcmp(command, "INSTALL") == 0)){
if (extraCmd == 0){
printf("%s is not recognized as an internal or external command, operable program or batch file. \n", code);
} else {
if ((strcmp(parameter, "-b") == 0) || (strcmp(parameter, "-B") == 0)){
PROCESS_INFORMATION pi = createBackgroundProcess(extraCmd, parameter);
arrProcessID[0] = pi.dwProcessId;
printf("%d \n",sizeof(arrProcessID));
printf("%lu \n",arrProcessID[0]);
}
}
}
if(strcmp(command,"exit") == 0 || strcmp(command, "quit") == 0){
loop = 0;
printf("Program Terminated\n");
}
while(getchar() != '\n');
}
return 0;
}
そして、これはプロセスを作成するための私の関数です:
PROCESS_INFORMATION createBackgroundProcess(char *exeFileName, char *parameter){
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
CreateProcess(exeFileName,NULL,NULL,NULL,FALSE,
CREATE_NO_WINDOW,NULL,NULL,&si,&pi);
TerminateProcess(pi.hProcess, 0);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return pi;
}
しかし、プロセスを 1 つだけ作成すると、配列 arrProcessID のサイズは常に 40 (常に = sizeof(arrProcessID) * 4) になり、arrProcessID[0] に 1 つの値が追加されます。それで、私の配列はどうなりましたか?