Linux系统编程答案.docx

上传人:b****5 文档编号:6824925 上传时间:2023-01-10 格式:DOCX 页数:8 大小:15.97KB
下载 相关 举报
Linux系统编程答案.docx_第1页
第1页 / 共8页
Linux系统编程答案.docx_第2页
第2页 / 共8页
Linux系统编程答案.docx_第3页
第3页 / 共8页
Linux系统编程答案.docx_第4页
第4页 / 共8页
Linux系统编程答案.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

Linux系统编程答案.docx

《Linux系统编程答案.docx》由会员分享,可在线阅读,更多相关《Linux系统编程答案.docx(8页珍藏版)》请在冰豆网上搜索。

Linux系统编程答案.docx

Linux系统编程答案

《Linux系统编程》机试试卷答案

一.编程题:

(共4题100分)

1、利用文件描述符的方式实现将a.txt中的内容拷贝到b.txt中

(运行:

./cpa.txtb.txt)

#include

#include

#include

#include

char*res="copysucceed!

\n";

char*fail="illegalparameter!

\n";

int

main(intargc,char**argv)

{

if(argc!

=3){

write(STDOUT_FILENO,fail,strlen(fail));

exit

(2);

}

intfdin,fdout;

if((fdin=open(argv[1],O_RDONLY))==-1){

exit

(2);

}

if((fdout=

open(argv[2],O_WRONLY|O_CREAT,0777))==-1){

exit

(2);

}

charbuff[256];

ssize_tnreads;

while((nreads=read(fdin,buff,256))!

=0){

if(write(fdout,buff,nreads)!

=nreads){

exit

(2);

}

}

close(fdin);

close(fdout);

write(STDOUT_FILENO,res,strlen(res));

return0;

}

2.

#include

#include

#include

#include

#include

#include

intglobal=6;

charoutstr[]="parentprocessbegin!

\n";

int

main(void)

{

pid_tpid;

intvalue=88;

write(STDOUT_FILENO,outstr,sizeof(outstr)-1);

printf("beginforking\n");

if((pid=fork())==-1){

printf("forkerror\n",strerror(errno));

exit

(2);

}

if(pid==0){

global++;

value++;

}

if(pid>0)sleep

(2);

printf("processidis%d,globalis%d,valueis%d\n",pid,global,value);

exit(0);

}

3.

#include

#include

#include

#include

voidsignal_handler(int);

int

main(void)

{

pid_tpid;

if(signal(SIGCHLD,signal_handler)

==SIG_ERR){

printf("signalerror\n");

}

if((pid=fork())<0){

printf("forkerror\n");

}elseif(pid>0){//parent

inti=0;

for(;;){

printf("parent:

iis

%d\n",++i);

sleep

(1);

}

}else{//child

inti=0;

for(;i<10;i++){

printf("child:

iis

%d\n",i);

sleep

(2);

}

_exit(0);

}

exit(0);

}

void

signal_handler(intsigno)

{

if(signo==SIGCHLD){

printf("childprocessdead!

\n");

wait(NULL);

exit(0);

}

}

4.

#include

#include

#include

#include

void*

th_fn(void*arg)

{

inti=1;

char*n=(char*)arg;

for(i=1;i<=100;i++){

printf("%s,%d\n",n,i);

}

}

int

main(void)

{

pthread_attr_tattr;

pthread_attr_init(&attr);

pthread_attr_setdetachstate(

&attr,PTHREAD_CREATE_DETACHED);

pthread_ttid;

interr;

if((pthread_create(

&tid,&attr,th_fn,"detached"))!

=0){

printf("pthreadcreateerror\n");

}

if((err=pthread_join(tid,NULL))!

=0){

printf("joinerror\n",strerror(err));

}

return0;

}

 

5.

服务器端:

#include

#include

#include

#include

#include

#include

#include

#defineSOCKADDRstructsockaddr

void

out(structsockaddr_in*adr)

{

charstr[16];

printf("sockaddress\t%s:

%d\n",

inet_ntop(AF_INET,

(SOCKADDR*)&adr->sin_addr.s_addr,str,16),

ntohs(adr->sin_port));

}

int

main(void)

{

intport=8888;

intfd;

structsockaddr_inserver,client;

//1constructsocketforIPV4andTCP

if((fd=socket(AF_INET,SOCK_STREAM,0))==-1){

printf("socketerror:

%s\n",strerror(errno));

exit

(2);

}

//2constructaddressstructandinitialization

memset(&server,0,sizeof(server));

server.sin_family=AF_INET;

server.sin_port=htons(port);

server.sin_addr.s_addr=INADDR_ANY;

//inet_pton(AF_INET,"172.16.1.17",&server.sin_addr.s_addr);

//3bindsockettoaddress

if(bind(fd,(SOCKADDR*)&server,

sizeof(server))==-1){

printf("binderror\n");

exit

(2);

}

//4notifythekernelacceptingconnectionrequest

listen(fd,0);

socklen_tlen=sizeof(client);

while

(1){

//5waitingfortheclientconnection

intsockfd=accept(fd,(SOCKADDR*)&client,&len);

out(&client);

time_tt=time(NULL);

char*p=ctime(&t);

//6sendthedata

write(sockfd,p,strlen(p));

//7closethesocket

close(sockfd);

}

close(fd);

}

客户端:

#include

#include

#include

#include

#include

#include

#include

int

main(intargc,char**argv)

{

intfd;

structsockaddr_inserver;

//1constructthesocketforipv4andtcp

if((fd=socket(AF_INET,SOCK_STREAM,0))==-1){

printf("socketerror:

%s\n",strerror(errno));

exit

(2);

}

//2constructserveraddress

memset(&server,0,sizeof(server));

server.sin_family=AF_INET;

server.sin_port=htons(atoi(argv[2]));

inet_pton(AF_INET,argv[1],

(structsockaddr*)&server.sin_addr.s_addr);

//3connecttotheserver

if(connect(fd,

(structsockaddr*)&server,sizeof(server))==-1){

printf("cannotconnecttoserver:

%s\n",

strerror(errno));

}

//4readdatafromnetwork

charbuff[1024];

intnreads=read(fd,buff,sizeof(buff));

//5processthedata

write(STDOUT_FILENO,buff,nreads);

//6closethesocket

close(fd);

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1