当前位置:  技术问答>linux和unix

为什么printf函数没有打印出信息?

    来源: 互联网  发布时间:2016-05-14

    本文导语:  我使用FreeBSD,调用signal函数 signal(SIGHUP,sig_hup); signal(SIGIO,sig_io); 然后调用如下代码,发现程序可以执行,但是出现一个奇怪的问题,printf函数失效了!例如printf("execute main()")应打印出execute main(),但是却什么也没有打...

我使用FreeBSD,调用signal函数
signal(SIGHUP,sig_hup);
signal(SIGIO,sig_io);

然后调用如下代码,发现程序可以执行,但是出现一个奇怪的问题,printf函数失效了!例如printf("execute main()")应打印出execute main(),但是却什么也没有打印出来!为什么printf函数不起作用?

代码如下:
#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=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(lendg_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

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • printf的问题 为什么没有输出
  • 为什么会我调试程序的时候出现“printf.c: 没有那个文件或目录. in printf.c“
  • java命名空间java.io类console的类成员方法: printf定义及介绍
  • UDP包何printf?
  • java命名空间java.io类printstream的类成员方法: printf定义及介绍
  • Linux 中的printf、open、close
  • java命名空间java.io类printwriter的类成员方法: printf定义及介绍
  • [求解]关于printf 与 ++ --的疑惑
  • Python中类似printf的字符串格式化详解
  • printf的静态库在哪??
  • Eclipse对printf()不能输出到控制台的快速解决方法
  • printf显示的问题.
  • printf的奇怪现象
  • linux printf文字编码设定?
  • 如何在printf()中指定字段的宽度后,左端的用数字0而不用空格补全
  • 送分题,关于printf输出格式的问题。
  • 问个printf的问题
  • UART_printf在哪里?
  • printf到指定终端
  • ld 报undefined reference to `printf'求解决方法
  • 帮我分析一下这个printf语句
  • 怎么把int64_t(即 long long)的值printf出来?
  • 关于printf的缓冲区的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3