嵌入式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; }
原文地址:http://blog.csdn.net/jingjingxujiayou/article/details/33753287