printf()在fcgi模式下吞咽字节

时间:2015-07-20 19:42:46

标签: c printf fastcgi

我正在使用带有fastcgi的C程序,它调用以下函数来生成一个逗号分隔数字的输出行:

void print_numbers( double* numbers, int n) {
  for (int i=0;i<n;i++) 
    printf("%s%.4lf",i>0?",":"",numbers[i]);
}

当我从控制台启动程序时,这可以正常工作 - 它会打印一个数字列表,如

280.3689,223.3237,271.8893,241.5658,...

但是,当我使用程序作为fastcgi worker进程并从浏览器调用它时,它只会打印一系列逗号:

,,,,,,,,,,

我见过fcgi re #define s&#34; printf&#34;通过宏并将呼叫路由到FCGI_printf()。似乎某些输出被吞噬了#34;在浏览器/ fcgi环境中,一切都可以从控制台正常工作。

另外,当我避开printf()并使用sprintf()代替时:

void print_numbers( double* numbers, int n) {
  char s[20],t[500];
  *t = '\0';
  for (int i=0;i<n;i++) {
    sprintf(s,"%s%.4lf",i>0?",":"",numbers[i]);
    strcat(t,s);
    }
  printf(t);
}

然后,一切正常,也在浏览器中,我得到以逗号分隔的列表。但我想确保我可以在我的fcgi程序中使用printf()及其所有功能!

有什么想法吗?这是一个已知的问题吗? (我从http://www.fastcgi.com下载的fcgi-2.4.1-SNAP-0311112127处理Ubuntu 14.04

已修改

使用一点C测试程序很容易重现问题。我把它放在要点上: https://gist.github.com/rplantiko/18e8e859175f93454550

0 个答案:

没有答案