• 嵌入式linux多进程编程


    嵌入式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多进程编程-----
    ");
        printf("1 日历信息的显示
    ");
        printf("2 日期信息的显示
    ");
        printf("3 推断闰年信息服务
    ");
        printf("4 文件的赋值功能
    ");
        printf("5 数字排序
    ");
        printf("6 退出程序
    ");
        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
    ",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是闰年
    ",m);
        }else{
            printf("%d不是闰年
    ",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!
    ");
        	return;
        }
        out = creat(pathfile,S_IWUSR);
        if (-1 == out)
        {
        	printf("create file %s error!
    ",pathfile);
        	return;
        }
        while((flag = read(in,buffer,1024))>0)
        {
        	write(out,buffer,flag);
        }
        close(in);
        close(out);
        printf("copy file file2.c to %s
    ",pathfile);
    }
    // 5 对数字排序
    void SortNum()
    {
        int b[10]={29,59,8,9,16,7,2,98,29,10};
        
        int i,j,t,k;
        printf("数组中的10个数字为:
    ");
        for (i = 0; i < 10; i ++) {
            printf("%d	",b[i]);
        }
        printf("
    ");
        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("从大到小的顺序为;
    ");
        for(i=0;i<10;i++)
            printf("%d	",b[i]);
        printf("
    ");
    }
    void menu()
    {
        
        int choose ,k=1;
        pid_t child;
        while(1)
        {
        choose=Start();
        switch (choose) {
            case 1:
                if ((child=fork())==-1) {
                    printf("error......
    ");
                }else if (child==0)
                {
                    DisplayCalen();
                }else if( child > 0 )
    	  {
    	      waitpid( child, NULL, 0) ;
    	  }
                    break;
            case 2:
                if ((child=fork())==-1) {
                    printf("error......
    ");
                }else if (child==0)
                {
                    DisplayDate();
                }else if( child > 0 )
    	  {
    	      waitpid( child, NULL, 0) ;
    	  }
                break;
            case 3:
                if ((child=fork())==-1) {
                    printf("error......
    ");
                }else if (child==0)
                {
                    LeapYear();
                }else if( child > 0 )
    	  {
    	      waitpid( child, NULL, 0) ;
    	  }
                break;
            case 4:
                if ((child=fork())==-1) {
                    printf("error......
    ");
                }else if (child>0)
                {
                    CopyFile();
                }else if( child == 0 )
    	  {
    	      waitpid( child, NULL, 0) ;
    	  }
                break;
            case 5:
                if ((child=fork())==-1) {
                    printf("error......
    ");
                }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;
    }
    


  • 相关阅读:
    [Python 多线程] Concurrent (十五)
    [Python 多线程] GIL全局解释器锁 (十三)
    [Python 多线程] Semaphore、BounedeSemaphore (十二)
    自定义HandlerMethodArgumentResolver参数解析器和源码分析
    Dubbo分布式日志追踪
    kafka的分区分配策略
    深入剖析kafka架构内部原理
    kafka partition(分区)与 group
    Kafka消费组(consumer group)
    kafka存储机制以及offset
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5135366.html
Copyright © 2020-2023  润新知