Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- #include <unistd.h>
- #include<sys/wait.h>
- #include<sys/types.h>
- int main(int argc, char*argv[]){
- if(argc!=2){
- if(argc==1){
- fprintf(stderr,"Wymagany tylko jeden argument! \n");
- return 1;
- }
- else{
- fprintf(stderr,"Tylko jeden argument dozwolony! \n");
- }
- return 1;
- }
- else if (strlen(argv[1])>20){
- fprintf(stderr,"Argument musi mieć <20 znaków! \n");
- return 1;
- }
- int len=strlen(argv[1]);
- if(len==1){
- char c=argv[1][0];
- printf("Wartość ASCII argumentu %c to: %d \n",c,c);
- return c;
- }
- else
- {
- char part11[10];
- char part22[10];
- if(len%2==0){
- int nlen=len/2;
- char part1[nlen];
- part1[nlen]='\0';
- char part2[nlen];
- part2[nlen]='\0';
- for(int i=0;i<nlen;i++){
- part1[i]=argv[1][i];
- part2[i]=argv[1][i+nlen];
- memcpy(part11,part1,sizeof(part11));
- memcpy(part22,part2,sizeof(part22));
- }
- }
- else{
- int slen=len/2;
- int llen=slen+1;
- char part1[slen];
- part1[slen]='\0';
- char part2[llen];
- part2[llen]='\0';
- for(int i=0;i<slen;i++){
- part1[i]=argv[1][i];
- }
- for(int i=0;i<llen;i++){
- for(int j=slen;j<llen;j++){
- part2[i]=argv[1][j+i];
- }
- }
- memcpy(part11,part1,sizeof(part11));
- memcpy(part22,part2,sizeof(part22));
- }
- int exit1,exit2;
- int child1=fork();
- if(child1>0){
- int child2=fork();
- if(child2>0){
- int status1, chPid1 =waitpid(child1,&status1,0);
- int status2, chPid2 =waitpid(child2,&status2,0);
- exit1=WEXITSTATUS(status1);
- exit2=WEXITSTATUS(status2);
- printf("%d %d %s %c \n", getpid(), child1, part11, exit1);
- printf("%d %d %s %c \n", getpid(), child2, part22, exit2);
- }
- else{
- execlp("./program3","./program3",part22, NULL);
- }
- }
- else{
- execlp("./program3","./program3",part11, NULL);
- }
- if(exit1>exit2){
- return exit1;
- }
- else{
- return exit2;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement