小记
笔记
什么是thttpd
代替Tomcat在ARM上的服务器
配置thttpd
- 下载thttpd
http://www.acme.com/software/thttpd/
- 解压
- 进入文件夹内
cd thttpd-2.29
- 执行configure文件
.configure
- make
- 运行thttpd
执行
./thttpd -d /usr/local/www -p 80 -c /cgi-bin/\* -u root -nor
其中-d后面跟的是服务器的根目录,-p后面跟的是绑定的端口,-c后面是跟的cgi文件。*是取消通配符的意思,不然系统会自动用该目录下的所有文件代替"*",这样的意思就是根目录下的所有具有可执行权限的文件都为cgi文件
执行
ps aux | grep thttpd
查看是否配置成功
若出现类似
即成功
注:需要切换root角色进行
我在搞的时候,在根目录放了一个不可执行的index.html文件,导致疯狂报403错误,我还以为配置错了,make的时候报警告错误但是可以执行。
将代码解压后,根目录中有个configure文件,执行./configure生成Makefile,然后make一下即可生成thttpd可执行文件。若该程序要运行在嵌入式设备上,需要将Makefile文件中的编译器从默认的gcc改为适合该嵌入式设备的交叉编译器,需要改的Makefile文件有3个,即./Makefile、./cgi-src/Makefile和./extras/Makefile。对于某些thttpd版本,make可能会失败,提示getline函数与系统冲突,这里需要改一下./extras/htpasswd.c中的getline函数,将它重命名(一般改为get_line),以及将该文件内调用它的地方重命名,就行了。
su //切换root
查看一下ip信息
ifconfig
涉及到有关Linux修改文件权限的操作:
https://www.cnblogs.com/mmx8861/p/9330991.html
主要的代码:
如果是修改文件夹及子文件夹权限可以用
chmod -R 777 /var/home/userid/cc
thttpd的语法详解
./thttpd -d /usr/local/www/ -p 80 -c \* -u root -nor
选项基本介绍:
-C 指定一个可读的配置文件,可以在其中设置选项。使用一个配置文件的优势是,文件能被改变而且 thttpd将根据新的配置重新启动。 配置文件的语法很简单, 一系列的被空格分开的选项或"选项=值",选项名字和他们对应的指令行标志将被一起列出。
-p 设定一个交互的端口数字来监听,默认值是80 ,这一标志在配置文件中的选项名字是 " port ",在config.h中选项是是 DEFAULT_PORT
-d 对 chdir()指定一个目录,服务器的根目录,用来启动进程。这只是为了提供一个便捷方式,你也可以在shell 脚本中写一个命令来唤醒进程 这一面标志在c配置文件中的选项名字是" dir",在config.h 选项是WEBDIR USE_USER_DIR 。
-r 在初始化值时执行 chroot()能够限制文件访问程序的当前目录。如果 - r 是在默认下编译的,那么-nor 可以使其失效。-nor 可以限制文件访问程序的当前目录。这一标志在配置文件中的选项名字是 " chroot" 和 " nochroot",在 config.h文件中 选项是 ALWAYS_CHROOT
-dd 用来指定一个目录执行chdir(),如果你还没有chrooting, 你可以在-d标志后加上单一的chdir(),如果已经chrooting则可以把网页文件放入子目录,而不把它们和chroot tree混在一起。这一标志在配置文件中的选项名字是 " data_dir" 。
-nos 不要做显式的软链接检查。 通常情况下, thttpd 显式地在文件名中扩展了所有的软链接,以此来 检查驻留在初始文件树里的最终路径。 如果你想要避开这些检查而节省一些处理器时间,你就可以使用-nos标志,尽管这并不被推荐。但是,注意,如果你正在使用 chroot 选项,那么对软链接的检查就是不必要的因而被停止了 , 因此节省那些处理器时钟周期的保险办法是使用 chroot 。 这一标志在配置文件中的选项名字是 " symlinkcheck" 和 " nosymlinkcheck" 。
-v 做小开销的虚拟动作,如果-v是在编译时缺省配置的,那么-nov可以使其失效,下面有详细介绍。这一标志的 config- file的选项名字是 " vhost" 和 " novhost", config.h 选项是 ALWAYS_VHOST 。
-g 使用全局密码文件。这意味着,在这个目录树下的每个文件都是被在树顶部的单独.htpasswd文件所保护的。不管怎样,.htpasswd文件的语义是相同的。如果该选项被设置了,但在目录顶层却没有.htpasswd文件的话,那么thttpd进程可能没有被事先设置成一个局部.htpasswd文件,而且,如果这个也不存在的话,那么就表示该文件是没有任何密码的。如果-g被缺省编译了,那么-nog可以使其失效。这个标志在配置文件中的选项名是"globalpasswd"和"noglobalpasswd",在config.h中 的可选项是ALWAYS_GLOBAL_PASSWD。
-u 指定当以root初始启动程序后切换到哪一个使用者。默认值是 " nobody “。这一标志在配置文件中的选项名字是 " user”,在config.h中是DEFAULT_USER 。
-c 为 CGI 指定一个通配符, 举例来说如 “*.cgi"或 “/cgi-bin/”。这一标志在配置文件中的选项名字是 " cgipat”,在config.h 中是 CGI_PATTERN 。
-t 指定一个文件来结束设置。细节如下。这一标志在配置文件中的选项名字是 " throttles "
-h 为多用户环境指定一个绑定的主机名。缺省情况是,把所有的主机都绑定在本地机器上。下面是详细介绍。这一标志在配置文件中的选项名字是 " host ",在 config.h中是 SERVER_NAME 。
-l 指定一个日志文件。如果-l参数没有被指定,那么thttpd通过syslog()进行日志记录。如果"-l /dev/null"被指定了,那么thttpd就不会再进行日志记录了。这个标志的配置文件选项名是"logfile"。
-I 指定一个写进程号的文件。如果没有文件被指定,那么就没有进程号被写入了。你可以使用这个文件给thttpd发送信号。看下面的详细介绍;这一标志在配置文件中的选项名字是 " pidfile" 。
-T 指定一个使用MIME文本类型的字符集。缺省情况是iso-8859-1。这个标志在配置文件中的选项名是"charset",在config.h 中是DEFAULT_CHARSET。
-P 指定一个能够返回所有响应的P3P秘密服务头。
-M 指定秒钟数,在"Cache-Control: max-age"环境下被使用。对于所有的响应,头部被返回。一个与此等价的"终止"头部也随之生成。缺省情况是没有Cache控制 或者终止头部,这对大多数网站来说,是非常理想的。这个标志的配置文件选项名是"max_age"。
-V 表示现在的版本信息
-D 这个标志最初仅仅用来作为一个调试标志,但是,在这里仍然有提一下的价值。因为它
所做的这些事情的其中一件是阻止thttpd在后台自我复制。取而代之的是它象一个正规程序一样地在前台运行。在一些shell脚本中,你希望如果被封装的thttpd存在的话,它就会重启,如果你想运行这样的thttpd,应用这个标志是很有必要的。
连接设备的方式
- 网线
- Xshell、Xftp使用IP、用户名密码远程连接
了解一下交叉编译时讲的什么东西
这里有一篇讲GCC编译器和交叉编译的博客:
https://blog.csdn.net/lyd0813/article/details/89520716
这是一篇讲Linux系统下编译c文件的博客:
https://blog.csdn.net/qq_43645229/article/details/83868795
gcc hello.c -o hello
输入命令:gcc Hello.c -o hello,gcc是编译c文件的命令,若是.cpp文件则用g++,-o后面的hello就是可执行的文件名(可随意起一个filename);
运行可执行的hello文件
./hello
输入命令:./hello,“./”是运行可执行文件的命令
这里有一篇关于c文件和h文件的关系与区别的博客:
https://www.cnblogs.com/gaobo543013306/p/10144854.html
我摘取其中主要的内容:
编译器的几个基本过程:
1.预处理阶段
2.词法与语法分析阶段
3.编译阶段 =》 生成各个目标文件
4.连接阶段 =》 各个目标文件之间绝对地址定位 =》 生成可执行文件
编译器在编译时是以c文件为单位进行的,也就是说如果你的项目中一个c文件都没有,那么你的项目将无法编译
编译器以C文件作为一个单元,首先读这个C文件,发现第一句与第二句是包含.h文件,就会在所有搜索路径中寻找这两个文件,找到之后,就 会将相应.h文件中再去处理宏,变量,函数声明,嵌套的.h文件包含等