CGI程序学习(2)-CGI执行Shell脚本后无法在浏览器正常显示问题
来源:互联网 发布:大数据考试题目及答案 编辑:程序博客网 时间:2024/05/29 17:50
我的逻辑是,在CGI中执行一个Shell脚本,在浏览器上显示脚本生成的文本中的WIFI数据.但是浏览器一直无法正常显示,纠结了好几天.
Shell脚本大概这样:
#! /bin/sh echo "12345" > wifi_info
如果不执行脚本中 > wifi_info ,浏览器上正常显示
后来重新学习CGI基础原理,终于知道原因在哪里. 用户浏览器上显示的数据是 执行./cgi程序打印在通道上的数据,而Shell脚本执行 >wifi_info后,通道重定向到文本中,所以后面打印的数据无法正确打印在当前用户浏览器的通道上面,需要重定向回原来的通道上.
dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin、stdout和stderr。
函数原形如下:
#include <unistd.h> int dup( int oldfd ); int dup2( int oldfd, int targetfd )
基于以上原理,最终代码如下:
#include <stdio.h>#include <string.h>#include <sys/types.h>#include <unistd.h>#include <stdlib.h>#define STDIN_FILENO 0int main(){ /*--------------------重定向设定----------------*/ int fd = dup(STDOUT_FILENO);//复制原通道 /*--------------------执行shell-----------------*/ pid_t status; status = system("wifi.sh");//执行shell命令,会定向写入文件 if(-1 == status)//判断shell是否执行成功 { printf("System error!");return -1; } dup2(fd, STDOUT_FILENO);//重定向为浏览器通道 show();//读取文本并显示 close(fd);//关闭标识 return 0;}
show()函数里面涉及读取文本和printf到通道代码,下篇会讲读取和显示方法.
0 0
- CGI程序学习(2)-CGI执行Shell脚本后无法在浏览器正常显示问题
- CGI程序学习(3)-CGI程序中读取文本内容后显示在浏览器上
- 用c写cgi程序,不能在cgi程序中执行shell命令
- shell 写的CGI脚本的不能正常运行的问题
- shell 写的CGI脚本的不能正常运行的问题
- shell写cgi脚本
- 学习CGI脚本 (脚本)
- 网站发布后错误:该页无法显示 您试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序。
- 学习CGI脚本
- 使用shell脚本编写cgi
- 用python3写的cgi服务器脚本无法显示中文
- Apache Web 服务器配置CGI程序,执行Python、Perl脚本
- CGI程序学习
- 通过CGI实现在Web页面上执行shell命令
- 设置Apache执行CGI程序
- 关于apache上的CGI文件问题总结--为什么无法找到cgi文件、为什么找到了cgi文件却不执行反而询问是否下载或直接显示文件代码
- CGI程序学习(6)-在CGI程序中实现Html加载的Dialog弹出框
- 移植boa后运行CGI程序加载LD_LIBRARY_PATH环境变量问题
- jdk下载地址...
- android-设置系统及应用级屏幕亮度
- ArrayList的使用方法
- CUDA 遇到错误代号error MSB3721
- VC++启动使用外部软件详解
- CGI程序学习(2)-CGI执行Shell脚本后无法在浏览器正常显示问题
- opencv-2.4.9入门练习02
- 算法列表
- 去掉html中<script>标签的正则表达式
- Git 常用命令方法整理
- adapter与listview
- 福布斯:微软未来数周发布智能手表
- 高性能网络编程7----tcp连接的内存使用
- Thinking about Memory Management