Linux程序设计考试例题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);};