项目附 - 云盘项目-分析echo.c
分析FastCGI源码目录下example中echo.c代码:
/*
* echo.c --
*
* Produce a page containing all FastCGI inputs
*
*
* Copyright (c) 1996 Open Market, Inc.
*
* See the file "LICENSE.TERMS" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
*/
#ifndef lint
static const char rcsid[] = "$Id: echo.c,v 1.5 1999/07/28 00:29:37 roberts Exp $";
#endif /* not lint */ #include "fcgi_config.h" #include <stdlib.h> #ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif #ifdef _WIN32
#include <process.h>
#else
extern char **environ;
#endif #include "fcgi_stdio.h" //输出环境变量
static void PrintEnv(char *label, char **envp)
{
printf("%s:<br>\n<pre>\n", label);
for ( ; *envp != NULL; envp++) {
printf("%s\n", *envp);
}
printf("</pre><p>\n");
} int main ()
{
//environ 是指向环境变量 字符串数组(全局指针)
//保存初始状态下的环境变量执政
char **initialEnv = environ;
int count = ; //计数 //阻塞点,有请求来 FCGI_Accept 就返回
while (FCGI_Accept() >= ) {
//获取 CONTENT_LENGTH 环境变量的值
char *contentLength = getenv("CONTENT_LENGTH");
int len; printf("Content-type: text/html\r\n"
"\r\n"
"<title>FastCGI echo</title>"
"<h1>FastCGI echo</h1>\n"
"Request number %d, Process ID: %d<p>\n", ++count, getpid()); if (contentLength != NULL) {
//string 转 long
len = strtol(contentLength, NULL, );
}
else {
len = ;
} if (len <= ) {
printf("No data from standard input.<p>\n");
}
else {
int i, ch; printf("Standard input:<br>\n<pre>\n");
for (i = ; i < len; i++) {
if ((ch = getchar()) < ) {
printf("Error: Not enough bytes received on standard input<p>\n");
break;
}
putchar(ch);
}
printf("\n</pre><p>\n");
} //打印环境变量
PrintEnv("Request environment", environ);
PrintEnv("Initial environment", initialEnv);
} /* while */ return ;
}
访问web服务器后的页面显示信息:
http://192.168.1.45/login?user=citrus&passwd=123456
http请求头的 key 和最后拿到的环境变量的 key 对应关系保存在 nginx fastcgi.conf 文件里面。
FastCGI echo
Request number 1, Process ID: 58012
No data from standard input. Request environment: FCGI_ROLE=RESPONDER
SCRIPT_FILENAME=/usr/local/nginx/html/login
QUERY_STRING=user=citrus&passwd=123456
REQUEST_METHOD=GET
CONTENT_TYPE=
CONTENT_LENGTH=
SCRIPT_NAME=/login
REQUEST_URI=/login?user=citrus&passwd=123456
DOCUMENT_URI=/login
DOCUMENT_ROOT=/usr/local/nginx/html
SERVER_PROTOCOL=HTTP/1.1
REQUEST_SCHEME=http
GATEWAY_INTERFACE=CGI/1.1
SERVER_SOFTWARE=nginx/1.13.10
REMOTE_ADDR=192.168.1.119
REMOTE_PORT=60974
SERVER_ADDR=192.168.1.45
SERVER_PORT=80
SERVER_NAME=localhost
REDIRECT_STATUS=200
HTTP_ACCEPT=text/html, application/xhtml+xml, image/jxr, */*
HTTP_ACCEPT_LANGUAGE=zh-CN
HTTP_ACCEPT_ENCODING=gzip, deflate
HTTP_HOST=192.168.1.45
HTTP_CONNECTION=Keep-Alive
HTTP_USER_AGENT=Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko Core/1.70.3741.400 QQBrowser/10.5.3863.400 Initial environment:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX省略
项目附 - 云盘项目-分析echo.c的更多相关文章
- Golang仿云盘项目-2.2 保留文件元信息
本文来自博客园,作者:Jayvee,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/16459817.html 目录结构 E:\goproj\FileStorage ...
- 解构华为云HE2E项目中的容器技术应用
摘要:本文从容器技术应用的角度解构了HE2E项目的代码仓库配置.镜像构建.及docker-compose的部署方式.希望通过本篇文章分享可以使更多的开发者了解容器技术和华为云. 本文分享自华为云社区& ...
- 使用Git将项目托管到码云及从码云导入项目到本地
前言 码云+Git+IntellJ IDEA 欢迎转载,请注明作者和出处哦☺ Git 的安装及使用的教程 最好不要在官网下载,官网下载要vpn而且速度还很慢 . 推荐在 https://gi ...
- 云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第1篇
项目初探 项目地址: 原项目:https://github.com/lonng/nanoserver 调过的:https://github.com/Kirk-Wang/nanoserver 这将是一个 ...
- 关于举办 2015年 Autodesk 助力云应用项目开发活动通知
各位尊敬的Autodesk 合作伙伴,大家好! 相信您在过去的一年里应该对Autodesk最新的云服务技术有所了解,您是不是曾经闪现过一些很好的想法,却由于不确定是否真实可行,或担心没有技术支持来帮助 ...
- 调试 Azure 云服务项目的方法
调试 Azure 云服务项目 在菜单栏中选择“调试”>“启动调试”(键盘操作:F5). 重要提示 如果未将 Azure 云服务项目设置为启动项目,当你单击按钮以触发断点时,将出现以下错误:“外部 ...
- 1 游戏逻辑架构,Cocos2d-x游戏项目创建,HelloWorld项目创建,HelloWorld程序分析,(CCApplicationProtocol,CCApplication,AppDeleg
1 游戏逻辑架构 具体介绍 A 一个导演同一时间仅仅能执行一个场景,场景其中,能够同一时候载入多个层,一个层能够可载多个精灵.层中亦能够加层. B 场景切换 sceneàaddChild(la ...
- springboot项目部署云服务器
Springboot项目部署云服务器 springboot项目部署云服务器还是挺简单的 首先你要有java运行环境,就是jdk的安装,如果还没有装没有参考安装:阿里云ECS建网站(建站)超详细全套完整 ...
- Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框
作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节.交流QQ群:[编程之美 365234583]h ...
随机推荐
- Java类路径的问题
下面是eclipse中的文件组织形式. 下面是硬盘中文件的组织形式: src:中就是自己编写的没有编译的代码. target中是编译的Java中的class文件和一些不用编译的文件.这样也就明白了为什 ...
- Mongo Cursor
简介 在使用 Java 对数据库进行连接时,都会获取到一个 cursor ,cursor 实际指到的是我们查询数据库的query,而并不是 query 查询到的数据集. 此次在使用 mongo 的 c ...
- 【Python】学习笔记一:Hello world
前言 在我看来,无论我们学习什么语言第一个学习的估计都是Hello world,那么接下来就从Hello world说起! 编写代码 我在本机上已经安装了pycharm,所以我所编辑的代码都是在pyc ...
- POI 生成excel
POI生成原生Excel-工具类 https://www.jianshu.com/p/2dfe7fe7d02e JAVA poi 帮助类 https://www.cnblogs.com/Ca ...
- windos下hosts文件
win+R c:\windows\system32\drivers\etc
- windows 安装使用 Memcached
Windows无官方版本:下载地址http://static.runoob.com/download/memcached-win64-1.4.4-14.zip 安装: 1.解压下载的压缩包2.命令行模 ...
- springboot 项目中在普通类中调用dao层的mapper 出现空指针异常
项目中我遇到同样的问题 特记载一下 有两种方式 一. 该类使用@Component注解 添加一个本类类型的静态字段 创建一个初始化方法,贴上@PostConstruct 标签,用于注入bean 创建方 ...
- C++入门经典-例6.14-通过指针连接两个字符数组
1:字符数组是一个一维数组,引用字符数组的指针为字符指针,字符指针就是指向字符型内存空间的指针变量. char *p; char *string="www.mingri.book" ...
- 动态数组C语言实现
/* * DynamicArray.h * * Created on: 2019年7月22日 * Author: Jarvis */ #ifndef SRC_DYNAMICARRAY_H_ #defi ...
- Cassandra 如何处理跨数据中心的数据库延时问题
分布式系统的可靠.延时.一致性等问题是一般性问题,不局限于数据库,而Cassandra提供了一个很好的解决思路. Cassandra号称能做到跨数据中心的数据库访问的高效访问,它的实现方式其实是把延时 ...