輕量web伺服器開發日記09-日誌檔案的實現
主流的伺服器都標配一個日誌檔案,其檔案用於記錄伺服器執行的日常資訊,例如某個時間段的使用者請求連線數、訪問檔案統計數、成功或完成請求連線數、伺服器出錯資訊等等、該檔案主要幫助伺服器管理員更好地瞭解伺服器的執行情況。
具體操作函式實現:
(1)開啟日誌檔案:
int log_file_open(const char *pathname)
{
int fd = 0;
fd = open(pathname, O_WRONLY|O_APPEND|O_CREAT);
return fd;
}
(2)往日誌檔案中寫入資訊:
int log_file_writen(char *logfile,char *filename, int *line, const char *fmt, ...)
{
/* open the log_file and init it */
const char *pathname;
int fd;
char *path = logfile;
fd = log_file_open(path);
if(fd == -1)
{
return -1;
}
va_list ap;
time_t timep;
char *time_string = calloc (1,256), *ptr = calloc(1,1024);
char *buf1;
buf1 = calloc(1, 64);
int len = 0;
time(&timep);//取得當地時間
struct tm *timeinfo;
timeinfo = localtime(&timep);
strftime(time_string, 256, "%Y年%m月%d日 %H時%M分%S秒", timeinfo); //建立字串時間戳
string_append(ptr, strlen(ptr), time_string, strlen (time_string));
string_append(ptr, strlen(ptr), "(", strlen("("));
string_append(ptr, strlen(ptr), filename, strlen(filename));
string_append(ptr, strlen(ptr), ":", strlen(":"));
int_to_string(buf1, line);
string_append(ptr, strlen(ptr), buf1, strlen(buf1));
len = string_append(ptr, strlen(ptr), ")", strlen(")"));
for(va_start(ap, fmt); *fmt; fmt++)
{
int d;
char *s;
char *buf;
buf = calloc(1, 64);
//off_t o;
switch(*fmt)
{
/* string */
case 's':
case 'S':
s = va_arg(ap, char *);
string_append(ptr, strlen(ptr), " ", strlen(" "));
string_append(ptr, strlen(ptr), s, strlen(s));
break;
/* int(digital) */
case 'd':
case 'D':
d = va_arg(ap, int);
int_to_string(buf, d);
string_append(ptr, strlen(ptr), " ", strlen(" "));
string_append(ptr, strlen(ptr), buf, strlen(buf));
break;
case '(':
case ')':
case '<':
case '>':
case ',':
case ' ':
*buf = *fmt;
string_append(ptr, strlen(ptr), buf, strlen(buf));
break;
}
va_end(ap);
}
*(ptr + strlen(ptr)) = '\r';
*(ptr + strlen(ptr) + 1) = '\n';
*(ptr + strlen(ptr) + 2) = '\0';
writen(fd, ptr,strlen(ptr));
free(ptr);
free(time_string);
close(fd);
return 0;
}
下面是(2)中呼叫到的操作函式實現:
//將整型轉換為字元
int int_to_string(char *buf, int val)
{
char swap;
char *fin;
int temp = val;
if(temp < 0)
{
*(buf++) = '-';
temp = -temp;
}
fin = buf;
while(temp > 9)
{
*fin = 48 + (temp % 10);
fin++;
temp = temp / 10;
}
*(fin) = 48 + temp;
*(fin + 1) = '\0';
while(buf < fin)
{
swap = *fin;
*fin = *buf;
*buf = swap;
buf++;
fin--;
}
return 0;
}
//往套接字描述符中寫n個位元組
size_t writen(int fd, const void *vptr, size_t n)
{
size_t nleft;
ssize_t nwritten;
const char *ptr;
ptr = vptr;
nleft = n;
while(nleft > 0)
{
if((nwritten = write(fd, ptr, nleft)) <= 0)
{
if(nwritten < 0 && errno == EINTR)
nwritten = 0;
else
return -1;
}
nleft -= nwritten;
ptr += nwritten;
}
return n;
}
//在字串a的末尾新增字串b
int string_append(char *a, size_t a_len, char *b, size_t b_len)
{
int i;
for(i = 0;i <= b_len; i++)
{
*(a + a_len + i) = *(b + i);
}
return (a_len + b_len + 2);
}
效果例子:
19時35分19秒(test.c:69) head:accept has text/html
相關推薦
輕量web伺服器開發日記09-日誌檔案的實現
主流的伺服器都標配一個日誌檔案,其檔案用於記錄伺服器執行的日常資訊,例如某個時間段的使用者請求連線數、訪問檔案統計數、成功或完成請求連線數、伺服器出錯資訊等等、該檔案主要幫助伺服器管理員更好地瞭解伺服器的執行情況。 具體操作函式實現: (1)開啟日誌檔案:
輕量web伺服器開發日記01-antweb伺服器介紹
我是一名大學生,對網路程式設計頗感興趣,以致我在此期間開發一個輕量級web伺服器來娛樂下,該伺服器是執行在Unix系統,使用C語言編寫的程式。我命名它為antweb。 大家都知道ant的中文是螞蟻,螞
輕量web伺服器開發日記07-response結構體的實現
在日記06中介紹的request結構體是用於存放請求報文資訊的,而現在我要介紹的response結構體是用於存放伺服器分析request結構體裡的請求報文資訊後得出的響應報文。 (1)request結構體: typedef struct { //
web伺服器開發日記---HTTP請求及響應
HTTP URL (URL是一種特殊型別的URI,包含了用於查詢某個資源的足夠的資訊)的格式如下:http://host[":"port][abs_path] http表示要通過HTTP協議來定位網路資源;host表示合法的Internet主機域名或者IP地址;por
解決:阿里雲輕量應用伺服器CentOS-7.3啟動Tomcat時很卡,一直停留在Deploying web application directory
解決:阿里雲輕量伺服器啟動Tomcat時很卡,一直停留在 Deploying web application directory /usr/tomcat/apache-tomcat-8.0.53/webapps/docs 要等7,8分鐘才能啟動一個專案,真是捉急!! 24-
初識python輕量web框架flask
引入 輸出 urn 使用 簡單 域名 主動 main return 1.使用pip安裝Python包 大多數Python包都使用pip實用工具安裝,使用pyvenv創建的虛擬環境會自動安裝pip。 1.使用pip安裝Flask(其它Python包同理) pip inst
Python輕量Web框架Flask使用
執行 express ev配置 github 一個 textfield attribute dem 3.4 Python語言近些年越來越火,其特點是開發迅速,語法簡單,可移植等。本人就Python3基礎語法寫了Demo:https://github.com/tangthis
阿里雲輕量應用伺服器debian8.9用apache多埠搭建多站點
前幾天想要再搭個網站玩玩,就用阿里的伺服器,apache本地搭建站點和伺服器相差不多,然而卻踩了大坑,差點耗死在這兒。 先進入apache這個目錄,有如下資料夾: 開啟ports.conf, 新增 Listen 埠。 然後進入,sites-available 裡邊, 將000-defau
輕量應用伺服器 訪問jsp頁面就直接下載的問題
出現這個問題實質原因就是Tomcat伺服器就沒有起到作用,執行不了jsp檔案.這個是核心.去排查錯誤!網上查了好幾天了根本沒有解決我的我的問題. 1.網上大部分都說是這個原因 <%@ page language="java" contentType="text/html; charset=U
阿里輕量應用伺服器 Tomcat 注意的地方 Unsupported major.minor version 52.0(unable to load class
本地編譯工程,提交到遠端服務其的tomcat上報這個錯 Unsupported major.minor version 52.0(unable to load class com.cl.business.yx.dao.AnnouncementDAO) 報錯原因 本地編譯是jdk1.8 伺服
阿里雲輕量應用伺服器 怎麼控制怎麼上傳檔案怎麼安裝JDK和Tomcat完成JavaWeb的部署
你是否遇到過這些問題,自己的javaweb專案本地執行一切正常,但是一轉移到阿里伺服器之類的.就出現以下問題. 1 jsp無法解析java類 2 Only a type can be imported.
輕量應用伺服器安裝 phpMyAdmin
第一步:在phpMyAdmin官方網站http://www.phpmyadmin.net/downloads/下載原始碼包並解壓 cd /usr/local/src wget https://files.phpmyadmin.net/phpMyAdmin/4.6.0/phpMyAdmin-4.6.0-al
ubuntu伺服器搭建個人網站 ---- 阿里雲 輕量應用伺服器配置jdk tomcat mysql
目錄 1.購買雲伺服器 進入阿里雲 www.aliyun.com 可以用支付寶賬號登入,登陸後進入賬號管理->實名認證。還可以進行學生認證。如果進行學生認證的話,可以看到 雲翼計劃。學生優惠購買雲伺服器,9.5元/月。有兩種可供選擇,差別不大
阿里雲輕量應用伺服器mysql開啟遠端訪問
1.進入控制檯,點選防火牆按鈕 2.新增規則 3.新增mysql,埠號3306 4.登入mysql mysql -u root -p mysql 5.設定root使用者遠端連線的密碼為123456 grant all privileges on *.*
阿里雲輕量應用伺服器 搭建配置詳解
好久沒有更新部落格了,說來也是慚愧沒有養成記錄經驗的習慣。 有很多技術開發同學都想擁有自己的伺服器用來搭建個人網站,或者展示作品,但是怕租上不會配置或者嫌配置繁瑣難下決定。 廢話不多說直接進入正題,前兩天幫朋友配置一臺阿里雲的輕量應用伺服器(注意不是雲伺服器ECS但是大同小異)。 伺服器規格
web伺服器開發遇到的坑
1. ## 解決‘ORA-12505, TNS:listener does not currently know of SID given in connect descriptor’ ## **解決方法:** 開啟Oracle的 listener.or
大話WEB伺服器開發
本文純碎處於個人理解不可做科學依據。 前因 工作這麼多年斷斷續續看過一些有web伺服器程式設計的書,但是一直沒有把自己的理解整理起來,今天索性就做個總結,記得第一次接觸web網頁程式設計是02年,那時學校裡計算機比賽,學校有個哥們用ASP寫了一個電子商務的網站,記憶中
Windows10 進行遠端桌面連線阿里雲-輕量應用伺服器報錯: CredSSP 加密 Oracle 修正
Win+R,輸入 mstsc。 進入遠端桌面連線,我是連線阿里雲-輕量應用伺服器的,所以填的是伺服器的公網 IP。 輸入使用者名稱和密碼。 報錯:CredSSP 加密 Oracle 修正。 解決: Win+R,輸入 gpedit.msc。 選擇 計算機配
輕量應用伺服器MySQL遠端連線踩坑
輕量應用伺服器MySQL遠端連線踩坑 不算是給阿里雲打廣告吧,因為被阿里雲的“雲伺服器ECS” 和 “輕量應用伺服器”搞的很蛋疼。很多年前,阿里雲的學生機“雲翼計劃”預設就只有“雲伺服器ECS”,所以上個月我準備去買一年的學生機的時候,幾乎就選擇性忽略框框中的內容,選擇系統映象就直接
linux web伺服器開發技術文件
Robin(wrhttpd) is a very simple and very fast web server, it's object for ajax and Web Application ,and of course it's cross-platform,