linux代码文档格式.docx
- 文档编号:17393457
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:32
- 大小:546.41KB
linux代码文档格式.docx
《linux代码文档格式.docx》由会员分享,可在线阅读,更多相关《linux代码文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
{
perror("
open"
exit
(1);
}
while
(1)
if((nread=read(fd,buf_r,100))==-1)
if(errno==EAGAIN)
nodatayet\n"
read%sfromFIFO\n"
buf_r);
sleep
(1);
}
pause();
/*暂停,等待信号*/
unlink(FIFO);
//删除文件
}
2、管道写
#defineFIFO_SERVER"
charw_buf[100];
intnwrite;
/*打开管道*/
fd=open(FIFO_SERVER,O_WRONLY|O_NONBLOCK,0);
if(argc==1)
Pleasesendsomething\n"
exit(-1);
strcpy(w_buf,argv[1]);
/*向管道写入数据*/
if((nwrite=write(fd,w_buf,100))==-1)
TheFIFOhasnotbeenreadyet.Pleasetrylater\n"
else
write%stotheFIFO\n"
w_buf);
3、安装信号
signal.h>
voidmy_func(intsign_no)
if(sign_no==SIGINT)
IhavegetSIGINT\n"
elseif(sign_no==SIGQUIT)
IhavegetSIGQUIT\n"
intmain()
WaitingforsignalSIGINTorSIGQUIT\n"
/*注册信号处理函数*/
signal(SIGINT,my_func);
signal(SIGQUIT,my_func);
exit(0);
1、pipe管道1
unistd.h>
intpipe_fd[2];
pid_tpid;
char*p_wbuf;
intr_num;
/*创建管道*/
if(pipe(pipe_fd)<
0)
pipecreateerror\n"
return-1;
/*创建子进程*/
if((pid=fork())==0)//子进程OR父进程?
\n"
close(pipe_fd[1]);
sleep
(2);
/*为什么要睡眠*/
if((r_num=read(pipe_fd[0],buf_r,100))>
printf("
%dnumbersreadfromthepipeis%s\n"
r_num,buf_r);
close(pipe_fd[0]);
elseif(pid>
if(write(pipe_fd[1],"
Hello"
5)!
=-1)
parentwrite1Hello!
Pipe"
parentwrite2Pipe!
sleep(3);
waitpid(pid,NULL,0);
/*等待子进程结束*/
return0;
2、pipe管道2
pipecreatesuccess\n"
1、服务端(作业)
sys/socket.h>
netinet/in.h>
arpa/inet.h>
pthread.h>
#defineMAX_THRD10
#defineFD_MAX10
voidthreadRec(void*argv);
voidthreadSend(void*argv);
intmain(intargc,charconst*argv[])
intfdbuf[FD_MAX];
pthread_tthrd[MAX_THRD];
intmy_fd,new_fd;
intaddr_len;
intthrd_count=0;
charbuf[4];
structsockaddr_inmy_addr,new_addr;
if(argc!
=2){
%susage:
plsinputserver'
sip\n"
argv[0]);
/*createsocket*/
if((my_fd=socket(AF_INET,SOCK_STREAM,0))==-1){
socket"
exit(EXIT_FAILURE);
/*filladdressandportnumber*/
bzero(&
my_addr,sizeof(my_addr));
my_addr.sin_family=AF_INET;
my_addr.sin_addr.s_addr=inet_addr(argv[1]);
my_addr.sin_port=htons(8542);
/*bind*/
bind(my_fd,(__CONST_SOCKADDR_ARG)&
my_addr,(socklen_t)sizeof(my_addr));
/*listen*/
listen(my_fd,5);
waitingforconnecting\n"
pid=fork();
if(pid==-1){
fork"
elseif(pid==0){
//sendmsg
else{
while
(1){
addr_len=sizeof(new_addr);
/*accept*/
if((new_fd=
accept(my_fd,(__CONST_SOCKADDR_ARG)&
new_addr,(socklen_t*)&
addr_len))==-1){
accept"
continue;
sprintf(buf,"
%d"
new_fd);
pthread_create(&
thrd[thrd_count],NULL,(void*)threadRec,(void*)buf);
pthread_detach(thrd[thrd_count]);
thrd_count++;
close(my_fd);
/*receivefromclient*/
voidthreadRec(void*argv){
staticintcount=0;
charrec_message[128];
fd=atoi((char*)argv);
count++;
intcnt=count;
intlen;
the%dclient\n"
count);
len=recv(fd,(void*)rec_message,(size_t)sizeof(rec_message),0);
if(len<
=0){
client%dquited\n"
cnt);
break;
}else{
receivemessagefromthe%dclientis:
%s\n"
cnt,rec_message);
close(fd);
/*sendtoclient*/
voidthreadSend(void*argv)
2、客户端:
(作业)
intsendMsg(intfd);
intrecvMsg(intfd);
intsockfd;
structsockaddr_indest,client;
=3){
%s:
usage:
inputserver'
sipandclient'
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
client.sin_family=AF_INET;
client.sin_addr.s_addr=inet_addr(argv[2]);
client.sin_port=htons(1234);
dest,sizeof(dest));
dest.sin_family=AF_INET;
dest.sin_port=htons(8542);
dest.sin_addr.s_addr=inet_addr(argv[1]);
if((connect(sockfd,(__CONST_SOCKADDR_ARG)&
dest,(socklen_t)sizeof(dest)))==-1){
connect"
if(recvMsg(sockfd)==-1)break;
if(sendMsg(sockfd)==-1){
intsendMsg(intfd){
staticcharbuf[128];
sendmsg:
"
fgets(buf,128,stdin);
if(!
strncasecmp(buf,"
quit"
4)){
kill(0,SIGKILL);
if(send(fd,buf,sizeof(buf),0)==-1){
send"
intrecvMsg(intfd){
staticcharrec_message[128];
staticintlen;
len=recv(fd,(void*)rec_message,(size_t)sizeof(rec_message),0);
\nserverquited\n"
\nreceivemessagefromserveris:
rec_message);
三种通信方式(作业)
1、接收
voidmyhandler(intsig);
structsigactionact,oact;
act.sa_handler=myhandler;
sigemptyset(&
act.sa_mask);
act.sa_flags=0;
sigaction(SIGUSR1,&
act,&
oact);
mypid:
%d\n"
getpid());
waitingforsignal\n"
voidmyhandler(intsig)
igotsignal:
sig);
2、发送
if(argc!
=2)
%susage:
inputpid\n"
return;
intpid;
pid=atoi(argv[1]);
kill(pid,SIGUSR1);
sendsigover\n"
argv[1]=%s"
argv[1]);
1、管道通信发送
2、管道通信接收
父子进程通信
voidmain()
signal(SIGUSR1,myhandler);
if((pid=fork())==-1)
usleep(500);
childprocessisreceivingsignal\n"
parentprocessissendingsignal\n"
childprocessgotsignal:
%d\n"
sig);
TCP-client客户端
netdb.h>
#defineportnumber3333
intmain(intargc,char*argv[])
charbuffer[1024];
structsockaddr_inserver_addr;
structhostent*host;
/*使用hostname查询host名字*/
=2)
fprintf(stderr,"
Usage:
%shostname\a\n"
if((host=gethostbyname(argv[1]))==NULL)
{
Gethostnameerror\n"
/*客户程序开始建立sockfd描述符*/
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)//AF_INET:
Internet;
SOCK_STREAM:
TCP
SocketError:
%s\a\n"
strerror(errno));
/*客户程序填充服务端的资料*/
server_addr,sizeof(server_addr));
//初始化,置0
server_addr.sin_family=AF_INET;
//IPV4
server_addr.sin_port=htons(portnumber);
//(将本机器上的short数据转化为网络上的short数据)端口号
server_addr.sin_addr=*((structin_addr*)host->
h_addr);
//IP地址
/*客户程序发起连接请求*/
if(connect(sockfd,(structsockaddr*)(&
server_addr),sizeof(structsockaddr))==-1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 代码