我在fedora中开始了CGI的新项目。这是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
printf("Content-type:text/html\r\n\r\n");
printf("<!DOCTYPE html>\n");
printf("<html>\n");
printf("<title>EWN Lab</title>\n");
printf("<meta charset=\"UTF-8\">\n");
printf("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n");
printf("<body class=\"w3-light-grey\">\n");
system("ls"); // Problem comes due to this line
printf("</body>\n");
printf("</html>\n");
return 0;
}
当我使用命令行编译和执行程序时,它工作正常。但是,当我尝试通过浏览器执行时,它会显示&#34;内部服务器错误&#34;
我使用apache服务器作为Web服务器。任何人都知道哪个用户在通过Web浏览器运行程序时会执行此操作?
答案 0 :(得分:1)
我的自我找到了解决方案。 Thankyou @ user3386109。由于系统命令在这里失败,我使用pip编写了另一个函数。现在它工作正常。
具有var-arg功能的功能如下所示
void system_ext(const char *format, ...) {
char* string;
va_list args;
va_start(args, format);
if(0 > vasprintf(&string, format, args)) string = NULL;
va_end(args);
if(string) {
char buff[VLONG_STR_LEN] = {0};
FILE* file = popen(string, "r");
while(fgets(buff, VLONG_STR_LEN, file) != NULL);
pclose(file);
free(string);
} else {
printf("Error on formating string.\n");
}
}