gpt4 book ai didi

c - 带 C 包装的 Perl CGI

转载 作者:行者123 更新时间:2023-11-30 15:08:55 24 4
gpt4 key购买 nike

问题的基础。我有一项大学作业,要求我为电话簿编写一个基于 Perl/CGI 的网站。这部分很好,我对此很满意,但是,我在包装 cgi 文件时遇到了问题。我以前做过一次,没有出现任何问题,但这次做同样的事情却无法复制成功。

显示用户 ID 的基本 Perl 文件:

#!/usr/bin/perl -w

use English;

print "Content-type: text/html";

print "\n";
print "\n";
print "\n";

print "<html>\n";
print "<head><title>IDS.CGI</title></head>\n";
print "<body>\n";
print "<p>\nMy User ID is $UID\n</p>";
print "<p>\nMy effective User ID is $EUID\n</p>";
print "<p>\nMy Group ID is $GID\n</p>";
print "<p>\nMy effective Group ID is $EGID\n</p>";
print "\n</body>\n";
print "</html>\n";

包装器.C:

#include <stdio.h>
#include <unistd.h>

#define REAL_PATH "ids.pl"

int
main()
{
execl( REAL_PATH, REAL_PATH, 0 );
printf( "You should never see this message!\n" );
}

这会引发内部服务器错误 500。我已尽力对其进行调试,包括标题的间距等。它在终端中运行良好,但在 Web 浏览器中运行良好。服务器httpd错误日志显示“Premature end of headers”错误。然而,我看不出怎么会过早结束。

任何人可以提供的任何帮助将不胜感激。

最佳答案

与任何系统调用一样,您应该始终检查来自 execl() 的错误。通常您会查看返回值,但这不是必需的,因为成功将终止程序。

execl( REAL_PATH, REAL_PATH, 0 );
perror("exec of '"REAL_PATH"' failed");

这使用 perror处理将 errno 转换为人类可读的错误字符串并将其打印到 stderr。

我也会避免使用#define作为字符串常量,它们使用起来很尴尬。相反,请按照 this answer 中的建议使用 static const char REAL_PATH[] = "ids.pl" .

我不明白为什么你需要一个 C 包装器。对运行解释代码的 Web 服务器有某种奇怪的限制?

关于c - 带 C 包装的 Perl CGI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37017706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com