simply web server by unix c program
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/wait.h>
#define QLEN 20
#define APPLY_HEAD "HTTP/1.1 200 OK\r\nContent-Type: "
#define IMG "image/jpg"
#define TEXT "text/html"
#define APPLY_END "\r\n\r\n"
typedef struct
{
in_port_t port;
char root[1024];
} cnf_t;
void err_sys (char *str) { perror (str); exit (1); }
cnf_t * config (cnf_t * arg)
{
FILE *fp;
char buf[1024];
char *p;
static cnf_t backup;
if (NULL == arg)
arg = &backup;
fp = fopen ("config.ini", "r");
if (fp == NULL)
err_sys ("fail to fopen");
fgets (buf, 1024, fp);
p = strstr (buf, "=");
arg->port = atoi (p + 1);
fgets (buf, 1024, fp);
p = strstr (buf, "=");
strcpy (arg->root, p + 1);
arg->root[strlen (arg->root) - 1] = '\0';
fclose (fp);
return arg;
}
int socket_init (in_port_t port)
{
int lfd, n;
struct sockaddr_in serv_addr;
lfd = socket (AF_INET, SOCK_STREAM, 0);
if (lfd == -1)
err_sys ("fail to socket");
bzero (&serv_addr, sizeof (serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons (port);
inet_pton (AF_INET, "192.168.0.18", &serv_addr.sin_addr.s_addr);
n = bind (lfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr));
if (n == -1)
err_sys ("fail to bind");
n = listen (lfd, QLEN);
if (n == -1)
err_sys ("fail to listen");
return lfd;
}
char *get_path(int cfd, const char *root)
{
char *path; int n;
char *p, *q, *filename;
char buf[1024];
path = (char *)malloc(sizeof(char) * 1024); //or static char path[1024];
if (NULL == path) err_sys("fail to malloc ");
n = read (cfd, buf, 1024);
buf[n]
相关文档:
好久没上来了...有点对不起自己的良心...
话说这段时间快给这个函数搞死了...
我找找...我找我找...我就是要把它给搞明白了...
话说前段时间那个死人四则运算也把自己搞得半死了...额...现在还在停工状态...晕死....
再说scanf(),上网是可以找到些东西....但是都不怎么明白...打算自己搞明白了再上来写个详细点的吧...
......
exercise2.4
void squeeze(char s[],char t[])
{
int i,j,k;
int lens,lent;
lens=strlen(s);
lent=strlen(t);
for(i=0,k=0;i<lens;i++)
{
for(j=0;j<lent;j++)
if(s[i]==t[j])
break;
if(j==lent)
s[k++]=s[i];
}
s[k]='\0';
}
exercise2.5
int any(char s[],char t[ ......
9.2 共用体
C语言除了提供结构体这种可包含多种类型数据的构造类型外,还提供了一种从形式上看和结构体堪称“孪生兄弟”的构造类型——共用体(union)。
本节从共用体的概念入手,从共用体的概念、与结构体的异同、使用等方面进行详细的介绍。
9.2.1 什么是共用体
现实生活中,某些事 ......
在c中,参数默认是传值的,即在参数入栈时被复制一份
。在函数里面修改这些参数,不会影响外面的调用者。
例如
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void get_str(char * p)
{
p = (char *)malloc(sizeof("abcd"));
s ......