嵌入式linux多进程编程

来源:互联网 发布:淘宝网充气浴缸 编辑:程序博客网 时间:2024/05/22 10:39

嵌入式linux多进程编程


在主程序显示文本菜单,提供如下服务,要求每个服务都通过生成子进程来提供。
服务包括:日历信息显示,日期信息显示,判断闰年服务,文件复制功能,数字排序功能,退出功能。


代码和文档(有流程图的下载地址):http://download.csdn.net/download/jingjingxujiayou/7540893


#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <time.h>#include <fcntl.h>#include <sys/stat.h>void DisplayCalen();// 1 显示日历void DisplayDate(); // 2 显示日期void LeapYear();// 3 判断闰年void CopyFile();// 4 文件赋值功能void SortNum(); // 5 对数字排序int Start();// 开始界面void menu(); // 菜单函数int Start(){    int n;    printf("-----linux多进程编程-----\n");    printf("1 日历信息的显示\n");    printf("2 日期信息的显示\n");    printf("3 判断闰年信息服务\n");    printf("4 文件的赋值功能\n");    printf("5 数字排序\n");    printf("6 退出程序\n");    printf("please input your choose(1-6) ");    scanf("%d",&n);    return n;}void DisplayCalen(){execlp( "cal", "cal", "-sy", (char *)0 );}// 2 显示当前的系统日期void DisplayDate(){    struct tm *ptr;    time_t it;    it=time(NULL);    ptr=localtime(&it);    printf("%4d年%02d月%02d日 %d:%d:%d\n",ptr->tm_year+1900,ptr->tm_mon+1,ptr->tm_mday,ptr->tm_hour,ptr->tm_min,ptr->tm_sec);}// 3 判断闰年void LeapYear(){    int m;    printf("please input your years ");    scanf("%d",&m);    if (((0==m%4)&&(0!=m%100))||(0==m%400)) {        printf("%d是闰年\n",m);    }else{        printf("%d不是闰年\n",m);    }    }// 4 复制文件void CopyFile(){    const char* pathfile = "file1.c";    int in,out,flag;    char buffer[1024];    in  = open("file2.c",O_RDONLY, S_IRUSR);    if(-1 == in)    {    printf("open file file2.c error!\n");    return;    }    out = creat(pathfile,S_IWUSR);    if (-1 == out)    {    printf("create file %s error!\n",pathfile);    return;    }    while((flag = read(in,buffer,1024))>0)    {    write(out,buffer,flag);    }    close(in);    close(out);    printf("copy file file2.c to %s\n",pathfile);}// 5 对数字排序void SortNum(){    int b[10]={29,59,8,9,16,7,2,98,29,10};        int i,j,t,k;    printf("数组中的10个数字为:\n");    for (i = 0; i < 10; i ++) {        printf("%d\t",b[i]);    }    printf("\n");    for(i=0;i<10-1;i++)        for(k=i,j=i+1;j<10;j++)        {            if(b[k]<b[j])            {                k=j;            }            if(i!=k)            {                t=b[i];                b[i]=b[k];                b[k]=t;            }        }    printf("从大到小的顺序为;\n");    for(i=0;i<10;i++)        printf("%d\t",b[i]);    printf("\n");}void menu(){        int choose ,k=1;    pid_t child;    while(1)    {    choose=Start();    switch (choose) {        case 1:            if ((child=fork())==-1) {                printf("error......\n");            }else if (child==0)            {                DisplayCalen();            }else if( child > 0 )  {      waitpid( child, NULL, 0) ;  }                break;        case 2:            if ((child=fork())==-1) {                printf("error......\n");            }else if (child==0)            {                DisplayDate();            }else if( child > 0 )  {      waitpid( child, NULL, 0) ;  }            break;        case 3:            if ((child=fork())==-1) {                printf("error......\n");            }else if (child==0)            {                LeapYear();            }else if( child > 0 )  {      waitpid( child, NULL, 0) ;  }            break;        case 4:            if ((child=fork())==-1) {                printf("error......\n");            }else if (child>0)            {                CopyFile();            }else if( child == 0 )  {      waitpid( child, NULL, 0) ;  }            break;        case 5:            if ((child=fork())==-1) {                printf("error......\n");            }else if (child==0)            {                SortNum();            }else if( child > 0 )  {      waitpid( child, NULL, 0) ;  }            break;        case 6:            system("exit");            break;        default:                break;       }     }}int main(){    menu();    return 0;}


0 0
原创粉丝点击