首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FastCGI与Ada

FastCGI与Ada
EN

Stack Overflow用户
提问于 2013-01-12 23:04:53
回答 1查看 595关注 0票数 4

我发现了C,这两个例子正在起作用。

现在我为艾达做了这个尝试,但两天后我就做不到了。

fcgi_stdio.ads

代码语言:javascript
复制
with Interfaces.C;
with Interfaces.C.Strings;

package fcgi_stdio is
    function FCGI_Accept return Interfaces.C.int;
    pragma Import (C, FCGI_Accept, "FCGI_Accept");

    procedure FCGI_printf (str : Interfaces.C.Strings.chars_ptr);
    pragma Import (C, FCGI_printf, "FCGI_printf");
end fcgi_stdio;

test.adb

代码语言:javascript
复制
with fcgi_stdio;
with Interfaces.C;
with Interfaces.C.Strings;

procedure Test is
begin
    while Integer (fcgi_stdio.FCGI_Accept) >= 0 loop
        fcgi_stdio.FCGI_printf (Interfaces.C.Strings.New_String ("Content-Type: text/plain" & ASCII.LF & ASCII.LF));
        fcgi_stdio.FCGI_printf (Interfaces.C.Strings.New_String ("Hello World from Ada!" & ASCII.LF));
    end loop;
end Test;

当我在控制台中运行它时,我会得到以下错误:

代码语言:javascript
复制
$ ./test
raised STORAGE_ERROR : stack overflow or erroneous memory access

Apache error_log显示:

代码语言:javascript
复制
Premature end of script headers: test

有人知道我怎么能让它起作用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-12 23:26:30

在Mac上进行实验,问题似乎是FCGI_printf()是一个varargs函数。它称FCGI_fprintf()为varargs:

代码语言:javascript
复制
int FCGI_fprintf(FCGI_FILE *fp, const char *format, ...)
{
    va_list ap;
    int n = 0;
    va_start(ap, format);          <------ crash here

Ada没有指定varargs函数的标准方法,而GNAT也没有实现定义的方法。

蚊虫文献说解决方案是为varargs函数提供一个C包装器:

代码语言:javascript
复制
#include <fcgi_stdio.h>
int FCGI_printf_wrapper(const char *msg)
{
  return FCGI_printf(msg);
}

并导入包装器:

代码语言:javascript
复制
procedure FCGI_printf (str : Interfaces.C.Strings.chars_ptr);
pragma Import (C, FCGI_printf, "FCGI_printf_wrapper");

程序的另一个问题是,在Ada中,与C和许多其他语言不同,"\n"不是在字符串中插入换行符的一种方式。试一试

代码语言:javascript
复制
fcgi_stdio.FCGI_printf
  (Interfaces.C.Strings.New_String ("Content-Type: text/plain" 
                                    & ASCII.LF & ASCII.LF));

编辑13.1.13

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14298896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档