QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: hobby!

Linux下的C编程程序源代码

[复制链接]
 楼主| 发表于 2004-11-22 10:46:25 | 显示全部楼层
#include <stdio.h>

#include <stdlib.h>

#include <string.h>



#define DATASIZE 10



typedef struct stringdata

{

            char *string;

            int iscontinuing;

            struct stringdata *next;

} mydata;



mydata *append(mydata *start, char *input);

void displaydata(mydata *start);

void freedata(mydata *start);



int main(void)

{

            char input[DATASIZE];

            mydata *start=NULL;



            printf("ENTER SOME DATA,AND PRESS Ctrl+D WHEN DONE. \n");



            while(fgets(input, sizeof(input), stdin))

            {

                start=append(start, input);

            }



            displaydata(start);

            freedata(start);

            return 0;

}



mydata *append(mydata *start, char *input)

{

           mydata *cur=start, *prev=NULL, *new;



            while(cur)

            {

                prev=cur;

                cur=cur->next;

            }

            cur=prev;



            new=malloc(sizeof(mydata));

            if(!new)

            {

                printf("COULDN’T ALLOCATE MEMORY! \n");

                exit(255);

            }

   

            if(cur)

                cur->next=new;

            else

                start=new;

   

            cur=new;



        if(!(cur->string=malloc(sizeof(input)+1)))

        {

                    printf("ERROR ALLOCATING MEMORY! \n");

                    exit(255);

        }

        strcpy(cur->string, input);

        cur->iscontinuing=!(input[strlen(input)-1]=='\n'||input[strlen(input)-1]=='\r');

        cur->next=NULL;



        return start;

}





void displaydata(mydata *start)

{

            mydata *cur;

        int linecounter=0, structcounter=0;

        int newline=1;



        cur=start;

        while(cur)

        {

                    if(newline)

                        printf("LINE %d:",++linecounter);

                    structcounter++;

                    printf("%s",cur->string);

                    newline=!cur->iscontinuing;

                    cur=cur->next;

        }

        printf("THIS DATA CONTAINED %d LINES AND WAS STORED IN %d STRUCTS. \n",

        linecounter,structcounter);

}





void freedata(mydata *start)

{

            mydata *cur, *next=NULL;



            cur=start;

            while(cur)

            {

                next=cur->next;

                       free(cur->string);

                free(cur);

                cur=next;

            }

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 10:51:53 | 显示全部楼层
#include <stdio.h>

#include <string.h>



void upcase(char *inputstring, char *newstring);



int main(void)

{

            char *string;

   

            upcase("Hello",string);

            printf("str1=%s \n", string);

        capitao("Goodbye", string);

            printf("str2=%s\n", string);



            free(string);



            return 0;

}





void upcase(char *inputstring, char *newstring)

{

            int counter;



            if(!newstring)

            {

                if(!(newstring=realloc(NULL, strlen(inputstring)+1)))

                {

                        printf("ERROR ALLOCATING MEMORY! \n");

                        exit(255);

                }

            }

            else

            {

                if(!(newstring=realloc(newstring, sizeof(inputstring)+1)))

                {

                        printf("ERROR REALLOCATING MEMORY! \n");

                        exit(255);

                    }

        }

        strcpy(newstring, inputstring);

        for(counter=0; counter<strlen(newstring); counter++)

        {

                if(newstring[counter]>=97&&newstring[counter]<=122)

                             newstring[counter]-=32;

        }

        return ;

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 11:00:37 | 显示全部楼层
#include <sys/types.h>

#include <sys/stat.h>

#include <sys/mman.h>

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <errno.h>

#include <unistd.h>

#include <fcntl.h>



int write_buffer(int fd, const void *buf, int count);



int outfile;

int main(void)

{

            char *mapped;

            char *ptr;



            if(outfile=open("test.dat", O_RDWR|O_CREAT|O_TRUNC, 0640)==-1)

            {

                printf("COULDN'T OPEN THIS FILE!\n");

                exit(254);

            }



            lseek(outfile,1000,SEEK_SET);

            if(write(outfile,"\0",1)==-1)

        {

                printf("ERROR, WRITE FAILED!\n");

                exit(254);

            }

        mapped=mmap(NULL, 1000, PROT_READ|PROT_WRITE,MAP_SHARED, outfile, 0);

        if(!mapped)

                    printf("ERROR, MMAP FAILED!\n");



        ptr=mapped;

        printf("PLEASE ENTER A NUMBER:");

        fgets(mapped, 80, stdin);



        ptr=mapped;

        sprintf(ptr,"YOUR NUMBER TIMES TWO IS:%d.\n",atoi(mapped)*2);

        printf("YOUR NUMBER TIMES TWO IS:%d\n",atoi(mapped)*2);



        msync(mapped, 1000, MS_SYNC);

        munmap(mapped,1000);



        if(!close(outfile))

        {

                printf("POSSIBLY SERIOUS ERROR,CLOSE FILE FAILED");

                exit(254);

            }

        return 0;

}





int write_buffer(int fd, const void *buf, int count)

{

            const void *pts=buf;

            int status=0, n;



            if(count<0)

                return(-1);

            while(status!=count)

            {

                if(n=write(outfile, "\0",1)==-1)

                {

                        printf("ERROR, WRITE FAILED!\n");

                        exit(254);

                }

                if(n<0)

                            return(n);

                status+=n;

            }

        return(status);

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 11:02:01 | 显示全部楼层
#include <sys/types.h>

#include <sys/stat.h>

#include <sys/mman.h>

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <errno.h>

#include <unistd.h>

#include <fcntl.h>



int write_buffer(int fd, const void *buf, int count);



int main(void)

{

        int outfile;

        char *mapped;

        char *ptr;

        int count;



        if(outfile=open("test.dat", O_RDWR|O_CREAT|O_TRUNC, 0640)==-1)

        {

                printf("COULDN’T OPEN THIS FILE!\n");

                exit(254);

        }



        lseek(outfile, 1000, SEEK_SET);

        if(write(outfile, "\0",1)==-1)

        {

                printf("ERROR, WRITE FAILED!\n");

                exit(254);

        }

        mapped=mmap(NULL, 1000, PROT_READ|PROT_WRITE,MAP_SHARED, outfile, 0);

        if(!mapped)

        {

                printf("ERROR, MMAP FAILED!\n");

                exit(254);

        }



        for(count=0; count<1000; count++)

        {

                if(*(mapped+count)>=97&&*(mapped+count)<=122)

                        *(mapped+ count)-= 32;

        }



        msync(mapped, 1000, MS_SYNC);

        munmap(mapped,1000);



        if(!close(outfile))

        {

                printf("POSSIBLY SERIOUS ERROR,CLOSE FILE FAILED");

                exit(254);

        }

        return 0;

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 11:02:45 | 显示全部楼层
#include <sys/types.h>

#include <stdio.h>

#include <unistd.h>



int main(void)

{

            pid_t pid;

            if((pid=fork())<0)

        {

                    printf("fork error! \n");

                    exit(1);

        }

        else if(pid==0)

        {

                    printf("Child process is printing.\n");

        }

        else

        {

                    printf("Parent process is printing.\n");

        }



        exit(0);

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 11:04:01 | 显示全部楼层
#include <sys/types.h>

#include <stdio.h>

#include <unistd.h>



int main(void)

{

            pid_t pid;

            if((pid=vfork())<0)

        {

                    printf("fork error! \n");

                    exit(1);

        }

        else if(pid==0)

        {

                    printf("Child process is printing.\n");

        }

        else

        {

                    printf("Parent process is printing.\n");

        }



        exit(0);

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 11:04:46 | 显示全部楼层
#include <sys/types.h>

#include <stdio.h>

#include <unistd.h>



int main(void)

{

            pid_t pid;

            if((pid=vfork())<0)

        {

                    printf("fork error! \n");

                    exit(1);

        }

        else if(pid==0)

        {

                    printf("Child process PID: %d.\n",getpid());

                    setenv("PS1", "CHILD\\$", 1);

                printf("Process%4d: calling exec.\n",getpid());

                if(execl("/bin/sh", "/bin/sh", "arg2", NULL)<0)

                {

                            printf("Process%4d: execle error!\n",getpid());

                            exit(0);

                }

                printf("Process%4d: You should never see this because the child is already gone. \n",

                        getpid());

                    printf("Precess%4d: The child process is exiting.");

        }

        else

        {

                    printf("Parent process PID:%4d.\n", getpid());

                    printf("Process%4d: The parent has fork process %d.\n", pid);

                    printf("Process%4d: The child has called exec or has exited.\n", getpid());

        }

        return 0;

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 11:09:31 | 显示全部楼层
#include <sys/types.h>

#include <sys/wait.h>

#include <stdio.h>



void h_exit(int status);



int main(void)

{

            pid_t pid;

            int status;



            if((pid=fork())<0)

            {

                printf("fork error!\n");

                exit(0);

            }

            else if(pid==0)

                exit(7);

            if(wait(&status)!=pid)

            {

                printf("wait error!\n");

                exit(0);

            }

            h_exit(status);



            if((pid=fork())<0)

            {

                printf("fork error!\n");

                exit(0);

            }

            else if(pid==0)

                exit(1);

            if(wait(&status)!=pid)

            {

                printf("wait error!\n");

                exit(0);

            }

            h_exit(status);



            if((pid=fork())<0)

            {

                printf("fork error!\n");

                exit(0);

            }

            else if(pid==0)

        

            if(wait(&status)!=pid)

            {

                printf("wait error!\n");

                exit(0);

            }

            h_exit(status);



            exit(0);

}





void h_exit(int status)

{

            if(WIFEXITED(status))

                printf("normal termination, exit status=%d .\n", WEXITSTATUS(status));

            else if(WIFSIGNALED(status))

                printf("abnormal termination, exit status=%d. \n", WTERMSIG(status));

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 11:54:10 | 显示全部楼层
#include <sys/types.h>

#include <sys/wait.h>

#include <sys/resource.h>

#include <stdio.h>

#include <unistd.h>

#include <stdarg.h>

#include <unistd.h>

#include <stdlib.h>



void waitchildren(int signum);

void h_exit(int status);



int main(void)

{

            pid_t pid;

            int status;



            if((pid=fork())<0)

            {

                printf("fork error!\n");

                exit(0);

            }

            else if(pid==0)

            {

                printf("Hello from the child process%4d!\n", getpid());

                setenv("PS1", "CHILD \ \ $", 1);

                printf("Process%4d: I’m calling exec. \n", getpid());

                execl("/bin/sh", "/bin/sh", NULL);

                printf("Process%4d: You should never see this because the child is already gone.\n", getpid());

            }

            else if(pid!=-1)

            {

                printf("Hello from the parent process%4d!\n", getpid());

                printf("Process%4d: The parent has forked process %d. \n", getpid(),pid);

                printf("Process%4d: The parent is waiting for the child to exit.\n", getpid());

                wait4(pid, &status, 0, NULL);

                h_exit(status);

            }



        return 0;

}





void h_exit(int status)

{

            if(WIFEXITED(status))

                printf("normal termination, exit status=%d .\n", WEXITSTATUS(status));

            else if(WIFSIGNALED(status))

                printf("abnormal termination, exit status=%d. \n", WTERMSIG(status));

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 11:55:14 | 显示全部楼层
#include <sys/types.h>

#include <stdio.h>

#include <unistd.h>



void forkerror(void);

void execerror(void);



int main(void)

{

            pid_t pid;

            if((pid=vfork())<0)

        {

                    atexit(forkerror);

        }

        else if(pid==0)

        {

                    printf("Child process PID: %d.\n",getpid());

                    setenv("PS1", "CHILD\\$", 1);

                printf("Process%4d: calling exec.\n",getpid());

                if(execl("/bin/sh", "/bin/sh", "arg2", NULL)<0)

                {

                            atexit(execerror);

                }

                printf("Process%4d: You should never see this because the child is already gone. \n",

                        getpid());

                    printf("Precess%4d: The child process is exiting.");

        }

        else

        {

                    printf("Parent process PID:%4d.\n", getpid());

                   printf("Process%4d: The parent has fork process %d.\n", pid);

                    printf("Process%4d: The child has called exec or has exited.\n", getpid());

        }

        return 0;

}





void forkerror(void)

{

            printf("fork error!\n");

            exit(1);

}





void execerror(void)

{

            printf("exec error!\n");

            exit(1);

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 11:58:24 | 显示全部楼层
#include <sys/types.h>

#include <sys/wait.h>

#include <stdio.h>



void h_exit(int status);

static void forkerror(void);

static void waiterror(void);



int main(void)

{

            pid_t pid;

            int status;



            if((pid=fork())<0)

            {

                atexit(forkerror);

            }

            else if(pid==0)

                abort();

            if(wait(&status)!=pid)

            {

                atexit(waiterror);

            }

            h_exit(status);

       

            exit(0);

}





void h_exit(int status)

{

            if(WIFEXITED(status))

                printf("normal termination, exit status=%d .\n", WEXITSTATUS(status));

            else if(WIFSIGNALED(status))

                printf("abnormal termination, exit status=%d. \n", WTERMSIG(status));

}





void forkerror(void)

{

            printf("fork error!\n");

}





void waiterror(void)

{

            printf("wait error!\n");

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 12:07:25 | 显示全部楼层
#include <sys/types.h>

#include <sys/stat.h>

#include <sys/mman.h>

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <errno.h>

#include <unistd.h>

#include <fcntl.h>



int write_buffer(int fd, const void *buf, int count);



int outfile;

int main(void)

{

            char *mapped;

            char *ptr;



            if(outfile=open("test.dat", O_RDWR|O_CREAT|O_TRUNC, 0640)==-1)

            {

                printf("COULDN'T OPEN THIS FILE!\n");

                exit(254);

            }



            lseek(outfile,1000,SEEK_SET);

            if(write(outfile,"\0",1)==-1)

        {

                printf("ERROR, WRITE FAILED!\n");

                exit(254);

            }

        mapped=mmap(NULL, 1000, PROT_READ|PROT_WRITE,MAP_SHARED, outfile, 0);

        if(!mapped)

                    printf("ERROR, MMAP FAILED!\n");



        ptr=mapped;

        printf("PLEASE ENTER A NUMBER:");

        fgets(mapped, 80, stdin);



        ptr=mapped;

        sprintf(ptr,"YOUR NUMBER TIMES TWO IS:%d.\n",atoi(mapped)*2);

        printf("YOUR NUMBER TIMES TWO IS:%d\n",atoi(mapped)*2);



        msync(mapped, 1000, MS_SYNC);

        munmap(mapped,1000);



        if(!close(outfile))

        {

                printf("POSSIBLY SERIOUS ERROR,CLOSE FILE FAILED");

                exit(254);

            }

        return 0;

}





int write_buffer(int fd, const void *buf, int count)

{

            const void *pts=buf;

            int status=0, n;



            if(count<0)

                return(-1);

            while(status!=count)

            {

                if(n=write(outfile, "\0",1)==-1)

                {

                        printf("ERROR, WRITE FAILED!\n");

                        exit(254);

                }

                if(n<0)

                            return(n);

                status+=n;

            }

        return(status);

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 12:07:49 | 显示全部楼层
#include <sys/types.h>

#include <sys/stat.h>

#include <sys/mman.h>

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <errno.h>

#include <unistd.h>

#include <fcntl.h>



int write_buffer(int fd, const void *buf, int count);



int main(void)

{

        int outfile;

        char *mapped;

        char *ptr;

        int count;



        if(outfile=open("test.dat", O_RDWR|O_CREAT|O_TRUNC, 0640)==-1)

        {

                printf("COULDN’T OPEN THIS FILE!\n");

                exit(254);

        }



        lseek(outfile, 1000, SEEK_SET);

        if(write(outfile, "\0",1)==-1)

        {

                printf("ERROR, WRITE FAILED!\n");

                exit(254);

        }

        mapped=mmap(NULL, 1000, PROT_READ|PROT_WRITE,MAP_SHARED, outfile, 0);

        if(!mapped)

        {

                printf("ERROR, MMAP FAILED!\n");

                exit(254);

        }



        for(count=0; count<1000; count++)

        {

                if(*(mapped+count)>=97&&*(mapped+count)<=122)

                        *(mapped+ count)-= 32;

        }



        msync(mapped, 1000, MS_SYNC);

        munmap(mapped,1000);



        if(!close(outfile))

        {

                printf("POSSIBLY SERIOUS ERROR,CLOSE FILE FAILED");

                exit(254);

        }

        return 0;

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 12:09:51 | 显示全部楼层
#include <sys/types.h>

#include <stdio.h>

#include <unistd.h>



int main(void)

{

            pid_t pid;

            if((pid=fork())<0)

        {

                    printf("fork error! \n");

                    exit(1);

        }

        else if(pid==0)

        {

                    printf("Child process is printing.\n");

        }

        else

        {

                    printf("Parent process is printing.\n");

        }



        exit(0);

}
回复

使用道具 举报

 楼主| 发表于 2004-11-22 12:16:25 | 显示全部楼层
#include <sys/types.h>

#include <stdio.h>

#include <unistd.h>



int main(void)

{

            pid_t pid;

            if((pid=vfork())<0)

        {

                    printf("fork error! \n");

                    exit(1);

        }

        else if(pid==0)

        {

                    printf("Child process is printing.\n");

        }

        else

        {

                    printf("Parent process is printing.\n");

        }



        exit(0);

}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 01:39 , Processed in 0.046925 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表