文章目录
介绍
Tinyhttpd 是J. David Blackstone在1999年写的一个不到 500 行的超轻量型 Http Server,用来学习非常不错,可以帮助我们真正理解服务器程序的本质。官网:http://tinyhttpd.sourceforge.net
用到的相关知识
1. 源码注释
2. cgi(common gateway interface)
https://zhuanlan.zhihu.com/p/25013398
excel运行gui程序
3. socket 嵌套字
socket原理&TCP/IP及相关函数
socketaddr&htons
htons(host to network, short)
,把主机字节序转换成网络字节序
htonl(host to network, long)
,作用同上
由于网络上和主机的字节编码方式可能不一样(大端编码和小端编码),网络传输同意使用的是大端方式,在进行通信时要把编码方式进行统一,以免因为不同的编码方式造成错误。
socket的accept()
函数
socket编码之accept函数
socket中的accept函数理解
4. fork创建子进程及父子进程间的通信
linux中fork函数及子进程父进程进程先后
int fork()
, 创建一个新进程,系统给新进程分配资源,例如存储数据和代码的空间,然后把原来进程的所有值(包括数据、代码)都复制到新进程,只有少数值不同,相当于克隆了一个自己。父进程的返回值是子进程的pid, 子进程的返回值是0, 若返回值是-1则说明fork失败。父子进程的执行没有确定的先后关系,要看系统的调度安排。
父进程和子进程之间的通信可以通过管道进行
int pipe(int fd[2])
创建一个管道,若成功则为数组fd分配两个文件描述符。管道若创建成功返回0, 失败返回-1。fd[1]写数据,fd[0]读数据,数据单向流动,FIFO。管道只能用于父子进程或兄弟进程间的通信。管道对于管道两端的进程来说,就是一个文件,但它是单独构成一个文件系统,且只存在于内存之中。
5. 环境变量
环境变量的写putenv()和读getenv()
按照name=value格式写。
6. 数据类型或结构
intptr_t
int 类型的指针,为了避免不同平台上存储位数不一样造成的影响,用不同的整形来作为指针。intptr_t总是所在平台的位数。
intptr_t详解
strut stat
state 关于文件状态的结构体
int stat(const char *restrict pathname, struct stat *restrict buf)
buf
用来存储文件pathname相关的内容(如文件大小、修改时间等),返回值为0时表示成功, 返回值为-1则表示失败,错误代码保存在errno中。
struct stat 操作 小结
7. 其他函数
strcasecmp(const char * c1, const char *c2)
不区分大小写, 相同则返回0
strcmp(const char * c1, const char *c2)
区分大小写, 相同则返回0
sprintf()
用于格式化输出到字符串,主要用于int,double等数据向字符串的转化
strcpy()
用于字符串的复制,主要适用于字符串,复制到源串的末尾终止