Linux程序设计考试例题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例题1 程序A生成1个文件,其大小为1000字节,其内容为小写字母abcd...z的循环。试编写该程序。

文件名t1.c

#include

#include

#include

int main()

{

char x;

int i;

int fd=open("aa",O_CREAT|O_TRUNC|O_WRONLY,0666);

if(fd<0){printf("open file error!\r\n");exit(0);};

for(i=0;i<1000;i++)

{

x='a'+(i%26);

write(fd,&x,1);

}

close(fd);

}

例题2 读出一个文件a.txt的倒数第2个字节和倒数第1个字节,显示在屏幕上。并且显示出当前时间。

文件名t2.c

#include

#include

#include

#include

int main()

{

char x[2];

int fd=open("a.txt",O_RDONLY);

if(fd<0){printf("open file error!\r\n");exit(0);};

lseek(fd,-3,SEEK_END);

read(fd,x,2);

printf("倒数第二和第一字节为%c %c\r\n",x[0],x[1]);

close(fd);

time_t t;

time(&t);

printf("当前时间:%s",asctime(localtime(&t)));

}

例题3 产生一个进程树父进程有3个子进程,这三个子进程分别有2个子进程。每个进程退出前打印自己的进程id号

文件名t3.c

#include

#include

#include

int main()

{

int ret,i;

for(i=0;i<3;i++)

{

ret=fork();

if(ret==0)break;

}

if(ret==0)

for(i=0;i<2;i++)

{

ret=fork();

if(ret==0)break;

}

sleep(10);

printf("thread %d is exiting now \r\n",getpid());

}

测试方法:

在另一窗口

#su

#pstree -a

例题4 编写两程序实现消息队列通信

程序名t4snd.c

#include

#include

#include

#include

#include

#include

#include

#include

struct msgbuf

{

long mtype;

char ctext[100];

};

int main()

{

struct msgbuf buf;

int msid;

msid=msgget(0x1000,0666|IPC_CREAT);

if(msid<0){printf("open failed\r\n");exit(0);};

while(1)

{

buf.mtype=getpid();

scanf("%s",buf.ctext);

while((msgsnd(msid,&buf,strlen(buf.ctext),0))<0)

{

if(errno==EINTR)continue;

return ;

}

if(strcmp(buf.ctext,"exit")==0)break;

}

return 0;

}

文件名t4rev.c

#include

#include

#include

#include

#include

#include

#include

#include

struct msgbuf

{

long mtype;

char ctext[100];

};

int main()

{

struct msgbuf buf;

int msid,ret;

msid=msgget(0x1000,0666|IPC_CREAT);

if(msid<0){printf("open failed\r\n");exit(0);};

相关文档
最新文档