嵌入式linux多进程编程

2019-07-12 18:00发布

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

代码和文档(有流程图的下载地址):http://download.csdn.net/download/jingjingxujiayou/7540893
#include #include #include #include #include #include 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] 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; }