2
回答
请教你一下?为什么CGI程序无法输出页面呢?代码如下
华为云4核8G,高性能云服务器,免费试用   
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<string.h>
#include<stdio.h>
int main(void){

printf ("Content type: text/plain\n\n");
char FIFO[]=".myfifo";
char msg[8]="hello!\n";
char buf[8]={0};
//char stdo[35];
unlink(FIFO);
mkfifo(FIFO,0666);
if(fork()>0){
while(1)
{
int fd=open(FIFO,O_WRONLY);
write(fd,msg,sizeof(msg));
close(fd);
sleep(1);
}
}else{//child
while(1)
{

int fd=open(FIFO,O_RDONLY);
read(fd,buf,sizeof(buf));
// write(STDOUT_FILENO,buf,sizeof(buf));
//if(strlen(buf)>0)
printf("<html>");
printf("<body>");
printf("%s",buf);
printf("</body>");
printf("</html>");
close(fd);
sleep(1);
}

}
return 0;

}

在终端可以正确输出。。

<无标签>
举报
半点竹节
发帖于6年前 2回/521阅
共有2个答案 最后回答: 6年前

应该是有缓冲, 试下子进程每输出一轮在sleep前调用下fflush(stdout) ,另外,html和body最好写在while外面

这样写应该不会出错吧?能够正确使用管道吧??
--- 共有 1 条评论 ---
deleted根据信号或者自己做逻辑判断退出这些细节不说, 这段本身应该没问题. 但是需要关注三个地方的缓冲, cgi本身,需要调用fflush(stdout); webserver,这块得看具体文档了; 还有浏览器,小于一定大小(比如4kb),不显示,这个得自己填充一下吧.你的需求是典型的longpoll, 不是强制要求c写的cgi的话,其实像nodejs之类,有很好很高效的解决方案 6年前 回复
顶部