Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // SO IS1 213A LAB02
- // Krzysztof Osman
- // ok44448@zut.edu.pl
- #include <windows.h>
- #include <stdio.h>
- #include <string.h>
- int main(int argc, char *argv[])
- {
- if(argv[2]!=NULL || argv[1]==NULL)
- {
- return 1;
- }
- if(strlen(argv[1])>20)
- {
- printf("Za dlugi lancuch");
- return 1;
- }
- if(strlen(argv[1])==1)
- {
- return argv[1][0];
- }
- char *wyraz=argv[1];
- char nazwa1[11];
- char nazwa2[11];
- int x=0;
- int g=0;
- if(strlen(argv[1])%2==0)
- {
- while(x<strlen(argv[1])/2)
- {
- nazwa1[x]=wyraz[x];
- x++;
- }
- while(x<strlen(argv[1])+1)
- {
- nazwa2[g]=wyraz[x];
- x++;
- g++;
- }
- nazwa1[x/2]='\0';
- nazwa2[x]='\0';
- }
- else
- {
- while(x<(strlen(argv[1])/2))
- {
- nazwa1[x]=wyraz[x];
- //printf("Nazwa1c: %c\n",nazwa1[x]);
- x++;
- }
- while(x<strlen(argv[1]))
- {
- nazwa2[g]=wyraz[x];
- //printf("Nazwa2c: %c\n",nazwa2[g]);
- x++;
- g++;
- }
- nazwa1[x/2]='\0';
- nazwa2[x]='\0';
- }
- //printf("Nazwa1: %s\n",nazwa1);
- //printf("Nazwa2: %s\n",nazwa2);
- //printf("Pelna: %s\n",wyraz);
- STARTUPINFO si;
- PROCESS_INFORMATION pi[2];
- memset(&si, 0, sizeof(si));
- memset(&pi, 0, sizeof(pi));
- si.cb = sizeof(si);
- char *argument[2];
- int doreturn[2];
- argument[0]=nazwa1;
- argument[1]=nazwa2;
- //printf("argument[0]: %s\n",argument[0]);
- //printf("argument[1]: %s\n",argument[1]);
- for(int i = 0; i < 2; i++)
- {
- sprintf(argv[1], "a.exe %s ", argument[i]);
- if(CreateProcessA(NULL,argv[1],NULL,NULL,0,0,NULL,NULL,&si,pi+i) == 0)
- {
- printf( "CreateProcess #%d failed (%d).\n", i+1, GetLastError() );
- return 2;
- }
- printf("Process #%d created: handle=%p, identifier=%d\n", i+1, pi[i].hProcess, pi[i].dwProcessId);
- }
- HANDLE children[2] = {pi[0].hProcess,pi[1].hProcess};
- WaitForMultipleObjects(2, children, 1, INFINITE);
- for(int j = 1; j >= 0; j--)
- {
- GetExitCodeProcess(children[j],&doreturn[j]);
- CloseHandle( pi[j].hProcess );
- CloseHandle( pi[j].hThread );
- printf("Process #%d terminated.\n", j+1);
- }
- if(doreturn[0]>doreturn[1])
- {
- return doreturn[0];
- }
- else
- {
- return doreturn[1];
- }
- /*
- int wartosci_pid[2];
- int wartosci[2];
- int pid1=fork();
- if(pid1==0)
- {
- execlp("./a.out","./a.out",nazwa1,NULL);
- fprintf(stderr,"fork fail %s\n",strerror(errno));
- return 2;
- }
- else
- {
- wartosci_pid[0]=pid1;
- int status, child = waitpid(wartosci_pid[0],&status,0);
- int a = getpid();
- wartosci[0]=WEXITSTATUS(status);
- if(child!=-1)
- {
- printf("%d %d %s %c\n",a, child, nazwa1, wartosci[0] );
- }
- int pid2=fork();
- if(pid2==0)
- {
- execlp("./a.out","./a.out",nazwa2,NULL);
- fprintf(stderr,"fork fail %s\n",strerror(errno));
- return 3;
- }
- else
- {
- wartosci_pid[1]=pid2;
- int status, child = waitpid(wartosci_pid[1],&status,0);
- int a = getpid();
- wartosci[1]=WEXITSTATUS(status);
- if(child!=-1)
- {
- printf("%d %d %s %c\n",a, child, nazwa2, wartosci[1] );
- }
- }
- }
- */
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement