第十二周

it2022-05-05  81

第八章代码

1、2

#include <stdio.h>#include <unistd.h>int main(){    char    *arglist[3];    arglist[0] = "ls";    arglist[1] = "-l";    arglist[2] = 0 ;//NULL    printf("* * * About to exec ls -l\n");    execvp( "ls" , arglist );    printf("* * * ls is done. bye");    return 0;}

3

#include <stdio.h>#include <unistd.h>int main(){    char    *arglist[3];    char*myenv[3];    myenv[0] = "PATH=:/bin:";    myenv[1] = NULL;    arglist[0] = "ls";    arglist[1] = "-l";    arglist[2] = 0 ;    printf("* * * About to exec ls -l\n");    execlp("ls", "ls", "-l", NULL);    printf("* * * ls is done. bye\n");}

4

#include    <stdio.h>#include<sys/types.h>#include<unistd.h>int main(){    int ret_from_fork, mypid;    mypid = getpid();                  printf("Before: my pid is %d\n", mypid);    ret_from_fork = fork();    sleep(1);    printf("After: my pid is %d, fork() said %d\n",            getpid(), ret_from_fork);    return 0;}

5

#include <stdio.h>#include <unistd.h>int main(){    printf("before:my pid is %d\n", getpid() );    fork();    fork();    printf("aftre:my pid is %d\n", getpid() );    return 0;}

6

#include    <stdio.h>#include <stdlib.h>#include    <unistd.h>int main(){    int fork_rv; printf("Before: my pid is %d\n", getpid());    fork_rv = fork();       /* create new process   */    if ( fork_rv == -1 )        /* check for error  */        perror("fork");    else if ( fork_rv == 0 ){         printf("I am the child.  my pid=%d\n", getpid());            exit(0);    }    else{        printf("I am the parent. my child is %d\n", fork_rv);        exit(0);    }    return 0;}

7

#include    <stdio.h>#include <stdlib.h>#include    <unistd.h>int main(){    int fork_rv; printf("Before: my pid is %d\n", getpid());    fork_rv = fork();       /* create new process   */    if ( fork_rv == -1 )        /* check for error  */        perror("fork");    else if ( fork_rv == 0 ){         printf("I am the child.  my pid=%d\n", getpid());        printf("parent pid= %d, my pid=%d\n", getppid(), getpid());        exit(0);    }    else{        printf("I am the parent. my child is %d\n", fork_rv);        sleep(10);        exit(0);    }    return 0;}

8

#include <stdio.h>#include <stdlib.h>#include <unistd.h>int  gi=0;int main(){    int li=0;    static int si=0;    int i=0;    pid_t pid = fork();    if(pid == -1){        exit(-1);    }    else if(pid == 0){        for(i=0; i<5; i++){ printf("child li:%d\n", li++); sleep(1);            printf("child gi:%d\n", gi++);            printf("child si:%d\n", si++);        }        exit(0);            }    else{        for(i=0; i<5; i++){            printf("parent li:%d\n", li++);            printf("parent gi:%d\n", gi++);            sleep(1);            printf("parent si:%d\n", si++);        }    exit(0);            }    return 0;}

9

#include    <stdio.h>#include <stdlib.h>#include    <string.h>#include    <unistd.h>#define MAXARGS     20              #define ARGLEN      100             int execute( char *arglist[] ){    execvp(arglist[0], arglist);            perror("execvp failed");    exit(1);}char * makestring( char *buf ){    char    *cp;    buf[strlen(buf)-1] = '\0';          cp = malloc( strlen(buf)+1 );           if ( cp == NULL ){                  fprintf(stderr,"no memory\n");        exit(1);    }    strcpy(cp, buf);            return cp;          }int main(){    char    *arglist[MAXARGS+1];            int     numargs;                char    argbuf[ARGLEN];             numargs = 0;    while ( numargs < MAXARGS )    {                           printf("Arg[%d]? ", numargs);        if ( fgets(argbuf, ARGLEN, stdin) && *argbuf != '\n' )            arglist[numargs++] = makestring(argbuf);        else        {            if ( numargs > 0 ){                     arglist[numargs]=NULL;                  execute( arglist );                 numargs = 0;                    }        }    }    return 0;}

10

#include    <stdio.h>#include <stdlib.h>#include    <string.h>#include    <sys/types.h>#include    <sys/wait.h>#include    <unistd.h>#include    <signal.h>#define MAXARGS     20              #define ARGLEN      100             char *makestring( char *buf ){    char    *cp;    buf[strlen(buf)-1] = '\0';          cp = malloc( strlen(buf)+1 );           if ( cp == NULL ){                  fprintf(stderr,"no memory\n");        exit(1);    }    strcpy(cp, buf);            return cp;          }void execute( char *arglist[] ){    int pid,exitstatus;                 pid = fork();                       switch( pid ){        case -1:                perror("fork failed");            exit(1);        case 0:            execvp(arglist[0], arglist);                    perror("execvp failed");            exit(1);        default:            while( wait(&exitstatus) != pid )                ;            printf("child exited with status %d,%d\n",                    exitstatus>>8, exitstatus&0377);    }}int main(){    char    *arglist[MAXARGS+1];            int     numargs;                char    argbuf[ARGLEN];             numargs = 0;    while ( numargs < MAXARGS )    {                           printf("Arg[%d]? ", numargs);        if ( fgets(argbuf, ARGLEN, stdin) && *argbuf != '\n' )            arglist[numargs++] = makestring(argbuf);        else        {            if ( numargs > 0 ){                     arglist[numargs]=NULL;                  execute( arglist );                 numargs = 0;                    }        }    }    return 0;}

test

1

#include <stdio.h>#include <stdlib.h>int main(){    printf("hello");    fflush(stdout);    while(1);}

2

#include <stdio.h>int main(){    printf("hello\n");    while(1);}

3

#include <stdio.h>int main(){    fprintf(stdout, "1234", 5);    fprintf(stderr, "abcd", 4);}

4

#include <stdio.h>#include <unistd.h>#include <sys/types.h>int main(){    printf("my pid: %d \n", getpid());    printf("my parent's pid: %d \n", getppid());    return 0;}

5

#include <stdio.h>#include <stdlib.h>int main(){    char **pp;    pp[0] = malloc(20);    return 0;}

6

#include    <stdlib.h>int main ( int argc, char *argv[] ){    system(argv[1]); system(argv[2]);    return EXIT_SUCCESS;}               /* ----------  end of function main  ---------- */

7

#include    <stdio.h>#include <stdlib.h>#include    <sys/types.h>#include    <sys/wait.h>#include    <unistd.h>#define DELAY   4void child_code(int delay){    printf("child %d here. will sleep for %d seconds\n", getpid(), delay);    sleep(delay);    printf("child done. about to exit\n");    exit(17);}void parent_code(int childpid){    int wait_rv=0;      /* return value from wait() */    wait_rv = wait(NULL);    printf("done waiting for %d. Wait returned: %d\n",             childpid, wait_rv);}int main(){    int  newpid;    printf("before: mypid is %d\n", getpid());    if ( (newpid = fork()) == -1 )        perror("fork");    else if ( newpid == 0 )        child_code(DELAY);    else        parent_code(newpid);    return 0;}

#include    <stdio.h>#include <stdlib.h>#include    <sys/types.h>#include    <sys/wait.h>#include    <unistd.h>#define DELAY   10void child_code(int delay){    printf("child %d here. will sleep for %d seconds\n", getpid(), delay);    sleep(delay);    printf("child done. about to exit\n");    exit(27);}void parent_code(int childpid){    int wait_rv;        int child_status;    int high_8, low_7, bit_7;    wait_rv = wait(&child_status);    printf("done waiting for %d. Wait returned: %d\n", childpid, wait_rv);    high_8 = child_status >> 8;     /* 1111 1111 0000 0000 */    low_7  = child_status & 0x7F;   /* 0000 0000 0111 1111 */    bit_7  = child_status & 0x80;   /* 0000 0000 1000 0000 */    printf("status: exit=%d, sig=%d, core=%d\n", high_8, low_7, bit_7);}int main(){    int  newpid;    printf("before: mypid is %d\n", getpid());    if ( (newpid = fork()) == -1 )        perror("fork");    else if ( newpid == 0 )        child_code(DELAY);    else        parent_code(newpid);}

 

转载于:https://www.cnblogs.com/KG35/p/5005132.html


最新回复(0)