Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h> /* WNEK MICHAL - 256848*/
- #include <unistd.h>
- #include <string.h>
- #include <cstdlib>
- #include <errno.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <stdbool.h>
- int main(int argc,char* argv[])
- {
- int count=argc-1;
- struct server
- {
- pid_t pid;
- char *port;
- int state;
- };
- int flag=0;
- //pid_t server_son[count];
- server server_son[count];
- for (int i = 0; i < count; i++)
- {
- switch (server_son[i].pid = fork())
- {
- case -1:
- perror("Fatal Error! - son's fork\n");
- printf("errno = %d \n", errno);
- exit(1);
- break;
- case 0:
- server_son[i].port=argv[i+1];
- if(execl("./pserv","pserv",server_son[i].port,NULL)<0)
- {
- perror("Fatal Error! - execl\n");
- exit(1);
- }
- //return 0;
- break;
- }
- }
- pid_t pid;
- for(int i=0;i<argc;i++)
- {
- server_son[i].state=0;
- }
- while(flag<argc-1)
- {
- for(int i=0;i<argc;i++)
- {
- printf("IIIIIII: %d\n",i);
- if(server_son[i].state==0)
- {
- waitpid(server_son[i].pid, &server_son[i].state, 0); // Parent process waits here for child to terminate.
- switch (server_son[i].state)
- {
- case 0:
- switch (server_son[i].pid = fork())
- {
- case -1:
- printf("Error - fork, errno = %d \n", errno);
- exit(1);
- break;
- case 0:
- server_son[i].port=argv[i+1];
- printf("\t\t\tflaga= %d\n\n",flag);
- printf("\t\tport= %s\n\n",server_son[i].port);
- if(execl("./pserv","pserv",server_son[i].port,NULL)<0)
- {
- perror("Fatal Error! - execl\n");
- exit(1);
- }
- //return 0;
- break;
- }
- break;
- case 1:
- server_son[i].state=1;
- flag++;
- printf("\t\t\tflaga= %d\n\n",flag);
- break;
- }
- }
- }
- }
- printf("End of work with %d parameters\n",argc-1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement