From owner-freebsd-questions@FreeBSD.ORG Mon Jan 5 13:45:53 2009 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 46D361065674 for ; Mon, 5 Jan 2009 13:45:53 +0000 (UTC) (envelope-from mike.jeays@rogers.com) Received: from smtp119.rog.mail.re2.yahoo.com (smtp119.rog.mail.re2.yahoo.com [68.142.224.74]) by mx1.freebsd.org (Postfix) with SMTP id 0426C8FC17 for ; Mon, 5 Jan 2009 13:45:52 +0000 (UTC) (envelope-from mike.jeays@rogers.com) Received: (qmail 7716 invoked from network); 5 Jan 2009 13:45:52 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=rogers.com; h=Received:X-YMail-OSG:X-Yahoo-Newman-Property:From:To:Subject:Date:User-Agent:References:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-Disposition:Message-Id; b=UOWbUktn3iZduL6q5RbnbWkHUK0KejMafykJ5GuK/FMoAgCqG3AkdnOkIbHlsWUHCaK9OGB2SSMpfdpfEMXYNKSXD/rU6VM2JRFnlpeFEvfhkCFQDetcS/Z1EJRgjF8q4uMLcEqLKHJehIOyPvsrJhmTbdG5/gpJ54tUtt10d2s= ; Received: from unknown (HELO napoleon.local) (mike.jeays@99.224.75.182 with login) by smtp119.rog.mail.re2.yahoo.com with SMTP; 5 Jan 2009 13:45:52 -0000 X-YMail-OSG: wmRoL_UVM1nPUuxdhing.SEW3LvXpmkkJDe1ktdMd.R9PLEcJTtNYJYUH42FTlajzQ-- X-Yahoo-Newman-Property: ymail-3 From: Mike Jeays To: freebsd-questions@freebsd.org Date: Mon, 5 Jan 2009 08:45:50 -0500 User-Agent: KMail/1.9.10 References: <022201c96f07$553b65a0$3f83a8c0@user863c0bf569> In-Reply-To: <022201c96f07$553b65a0$3f83a8c0@user863c0bf569> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200901050845.50747.mike.jeays@rogers.com> Subject: Re: why printf() don't work? X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 05 Jan 2009 13:45:53 -0000 On January 5, 2009 02:29:23 am Edward King wrote: > I use FreeBSD7.0,and use signal,like follows: > signal(SIGHUP,sig_hup); > signal(SIGIO,sig_io); > > when I run call following code,it can run,but I find a puzzled question,it > should print some information,such as printf("execute main()") will print > execute main(),but in fact,printf fuction print none!!! Why printf function > do not go work? > > my code is follows: > > #include "sys/ioctl.h" > #include "unp.h" > static int sockfd; > #define QSIZE 8 > #define MAXDG 4096 > typedef struct{ > void *dg_data; > size_t dg_len; > struct sockaddr *dg_sa; > socklen_t dg_salen; > }DG; > static DG dg[QSIZE]; > static long cntread[QSIZE+1]; > static int iget; > static int iput; > static int nqueue; > static socklen_t clilen; > static void sig_io(int); > static void sig_hup(int); > > int main(int argc,char **argv){ > printf("execute main()"); > int sockfd; > struct sockaddr_in servaddr,cliaddr; > sockfd=socket(AF_INET,SOCK_DGRAM,0); > bzero(&servaddr,sizeof(servaddr)); > servaddr.sin_family=AF_INET; > servaddr.sin_addr.s_addr=htonl(INADDR_ANY); > servaddr.sin_port=htons(SERV_PORT); > bind(sockfd,(SA *)&servaddr,sizeof(servaddr)); > dg_echo(sockfd,(SA *)&cliaddr,sizeof(cliaddr)); > } > void dg_echo(int sockfd_arg,SA *pcliaddr,socklen_t clilen_arg){ > printf("called dg_echo"); > int i; > const int on=1; > sigset_t zeromask,newmask,oldmask; > sockfd=sockfd_arg; > clilen=clilen_arg; > for(i=0;i dg[i].dg_data=malloc(MAXDG); > dg[i].dg_sa=malloc(clilen); > dg[i].dg_salen=clilen; > } > iget=iput=nqueue=0; > signal(SIGHUP,sig_hup); > signal(SIGIO,sig_io); > fcntl(sockfd,F_SETOWN,getpid()); > ioctl(sockfd,FIOASYNC,&on); > ioctl(sockfd,FIONBIO,&on); > sigemptyset(&zeromask); > sigemptyset(&oldmask); > sigemptyset(&newmask); > sigaddset(&newmask,SIGIO); > sigprocmask(SIG_BLOCK,&newmask,&oldmask); > for(;;){ > while(nqueue==0) > sigsuspend(&zeromask); > sigprocmask(SIG_SETMASK,&oldmask,NULL); > > sendto(sockfd,dg[iget].dg_data,dg[iget].dg_len,0,dg[iget].dg_sa,dg[iget].dg >_salen); if(++iget>=QSIZE) > iget=0; > sigprocmask(SIG_BLOCK,&newmask,&oldmask); > nqueue--; > } > } > static void sig_io(int signo){ > printf("sig_io called"); > ssize_t len; > int nread; > DG *ptr; > for(nread=0;;){ > if(nqueue>=QSIZE) > err_quit("receive overflow"); > ptr=&dg[iput]; > ptr->dg_salen=clilen; > len=recvfrom(sockfd,ptr->dg_data,MAXDG,0,ptr->dg_sa,&ptr->dg_salen); > if(len<0){ > if(errno==EWOULDBLOCK) > break; > else > err_sys("recvfrom error"); > } > ptr->dg_len=len; > nread++; > nqueue++; > if(++iput>=QSIZE) > iput=0; > } > cntread[nread]++; > } > static void sig_hup(int signo){ > printf("sig_hup called"); > int i; > for(i=0;i<=QSIZE;i++) > printf("cntread[%d]=%ld\n",i,cntread[i]); > } > --------------------------------------------------------------------------- >------------------------ Confidentiality Notice: The information contained > in this e-mail and any accompanying attachment(s) is intended only for the > use of the intended recipient and may be confidential and/or privileged of > Neusoft Corporation, its subsidiaries and/or its affiliates. If any reader > of this communication is not the intended recipient, unauthorized use, > forwarding, printing, storing, disclosure or copying is strictly > prohibited, and may be unlawful.If you have received this communication in > error,please immediately notify the sender by return e-mail, and delete the > original message and all copies from your system. Thank you. > --------------------------------------------------------------------------- >------------------------ I think you need #include -- Mike Jeays http://www.jeays.ca