嵌入式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多進程編程-----\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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章