linux嵌入式多进程,嵌入式linux多进程编程

嵌入式linux多进程编程

在主程序显示文本菜单。提供例如以下服务。要求每一个服务都通过生成子进程来提供。

服务包含:日历信息显示,日期信息显示,推断闰年服务,文件复制功能,数字排序功能。退出功能。

#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多进程编程-----\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]

{

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值