Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.90 KB | None | 0 0
  1. // SO IS1 213A LAB02
  2. // Krzysztof Osman
  3. // ok44448@zut.edu.pl
  4.  
  5. #include <windows.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8.  
  9. int main(int argc, char *argv[])
  10. {
  11.  
  12. if(argv[2]!=NULL || argv[1]==NULL)
  13.     {
  14.     return 1;
  15.     }
  16. if(strlen(argv[1])>20)
  17.     {
  18.     printf("Za dlugi lancuch");
  19.     return 1;
  20.     }
  21.  
  22. if(strlen(argv[1])==1)
  23.     {
  24.     return argv[1][0];
  25.     }
  26.  
  27. char *wyraz=argv[1];
  28. char nazwa1[11];
  29. char nazwa2[11];
  30. int x=0;
  31. int g=0;
  32.  
  33. if(strlen(argv[1])%2==0)
  34. {
  35.     while(x<strlen(argv[1])/2)
  36.     {
  37.     nazwa1[x]=wyraz[x];
  38.     x++;
  39.     }
  40.     while(x<strlen(argv[1])+1)
  41.     {
  42.     nazwa2[g]=wyraz[x];
  43.    
  44.     x++;
  45.     g++;
  46.     }
  47. nazwa1[x/2]='\0';
  48. nazwa2[x]='\0';
  49.  
  50. }
  51. else
  52. {
  53.     while(x<(strlen(argv[1])/2))
  54.         {
  55.         nazwa1[x]=wyraz[x];
  56.         //printf("Nazwa1c: %c\n",nazwa1[x]);
  57.         x++;
  58.         }
  59.     while(x<strlen(argv[1]))
  60.         {
  61.         nazwa2[g]=wyraz[x];
  62.         //printf("Nazwa2c: %c\n",nazwa2[g]);
  63.         x++;
  64.         g++;
  65.         }
  66.  
  67. nazwa1[x/2]='\0';
  68. nazwa2[x]='\0';
  69.  
  70. }
  71.  
  72. //printf("Nazwa1: %s\n",nazwa1);
  73. //printf("Nazwa2: %s\n",nazwa2);
  74. //printf("Pelna: %s\n",wyraz);
  75.  
  76. STARTUPINFO si;
  77. PROCESS_INFORMATION pi[2];
  78.  
  79.  
  80. memset(&si, 0, sizeof(si));
  81. memset(&pi, 0, sizeof(pi));
  82. si.cb = sizeof(si);
  83.  
  84. char *argument[2];
  85. int doreturn[2];
  86.  
  87. argument[0]=nazwa1;
  88. argument[1]=nazwa2;
  89.  
  90. //printf("argument[0]: %s\n",argument[0]);
  91. //printf("argument[1]: %s\n",argument[1]);
  92. for(int i = 0; i < 2; i++)
  93. {
  94.     sprintf(argv[1], "a.exe %s ", argument[i]);
  95.         if(CreateProcessA(NULL,argv[1],NULL,NULL,0,0,NULL,NULL,&si,pi+i) == 0)
  96.         {
  97.             printf( "CreateProcess #%d failed (%d).\n", i+1, GetLastError() );
  98.             return 2;
  99.         }
  100. printf("Process #%d created: handle=%p, identifier=%d\n", i+1, pi[i].hProcess, pi[i].dwProcessId);
  101.  
  102.  
  103. }
  104.  
  105.  
  106. HANDLE children[2] = {pi[0].hProcess,pi[1].hProcess};
  107. WaitForMultipleObjects(2, children, 1, INFINITE);
  108. for(int j = 1; j >= 0; j--)
  109. {
  110.     GetExitCodeProcess(children[j],&doreturn[j]);
  111.     CloseHandle( pi[j].hProcess );
  112.     CloseHandle( pi[j].hThread );
  113.     printf("Process #%d terminated.\n", j+1);
  114.    
  115. }
  116.  
  117. if(doreturn[0]>doreturn[1])
  118. {
  119.     return doreturn[0];
  120. }
  121. else
  122. {
  123.     return doreturn[1];
  124. }
  125.  
  126.  
  127.  
  128. /*
  129. int wartosci_pid[2];
  130. int wartosci[2];
  131.  
  132. int pid1=fork();
  133.  
  134.  
  135. if(pid1==0)
  136. {
  137.     execlp("./a.out","./a.out",nazwa1,NULL);
  138.     fprintf(stderr,"fork fail %s\n",strerror(errno));
  139.     return 2;
  140. }
  141. else
  142. {
  143.     wartosci_pid[0]=pid1;
  144.     int status, child = waitpid(wartosci_pid[0],&status,0);
  145.     int a = getpid();
  146.     wartosci[0]=WEXITSTATUS(status);
  147.     if(child!=-1)
  148.     {
  149.     printf("%d %d  %s %c\n",a, child, nazwa1, wartosci[0] );
  150.     }
  151.        
  152.         int pid2=fork();
  153.         if(pid2==0)
  154.         {
  155.         execlp("./a.out","./a.out",nazwa2,NULL);
  156.         fprintf(stderr,"fork fail %s\n",strerror(errno));
  157.         return 3;
  158.         }
  159.         else
  160.         {
  161.             wartosci_pid[1]=pid2;
  162.             int status, child = waitpid(wartosci_pid[1],&status,0);
  163.             int a = getpid();
  164.             wartosci[1]=WEXITSTATUS(status);
  165.             if(child!=-1)
  166.             {
  167.             printf("%d %d  %s %c\n",a, child, nazwa2, wartosci[1] );
  168.             }
  169.         }
  170.    
  171. }
  172.  
  173.  
  174. */
  175.  
  176.  
  177.  
  178.  
  179. return 0;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement