亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

libevent庫的使用--定時器的使用實例

2020-01-26 15:39:36
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <event.h>
#include <evhttp.h>

#define RELOAD_TIMEOUT 5
#define DEFAULT_FILE "sample.html"

char *filedata;
time_t lasttime = 0;
char filename[80];
int counter = 0;

void read_file()
{
  int size = 0;
  char *data;
  struct stat buf;

  stat(filename,&buf);

  if (buf.st_mtime > lasttime)
    {
      if (counter++)
        fprintf(stderr,"Reloading file: %s",filename);
      else
        fprintf(stderr,"Loading file: %s",filename);

      FILE *f = fopen(filename, "rb");
      if (f == NULL)
        {
          fprintf(stderr,"Couldn't open file/n");
          exit(1);
        }

      fseek(f, 0, SEEK_END);
      size = ftell(f);
      fseek(f, 0, SEEK_SET);
      data = (char *)malloc(size+1);
      fread(data, sizeof(char), size, f);
      filedata = (char *)malloc(size+1);
      strcpy(filedata,data);
      fclose(f);


      fprintf(stderr," (%d bytes)/n",size);
      lasttime = buf.st_mtime;
    }
}

void load_file()
{
  struct event *loadfile_event;
  struct timeval tv;

  read_file();

  tv.tv_sec = RELOAD_TIMEOUT;
  tv.tv_usec = 0;

  loadfile_event = malloc(sizeof(struct event));

  evtimer_set(loadfile_event,
              load_file,
              loadfile_event);

  evtimer_add(loadfile_event,
              &tv);
}

void generic_request_handler(struct evhttp_request *req, void *arg)
{
  struct evbuffer *evb = evbuffer_new();

  evbuffer_add_printf(evb, "%s",filedata);
  evhttp_send_reply(req, HTTP_OK, "Client", evb);
  evbuffer_free(evb);
}

int main(int argc, char *argv[])
{
  short          http_port = 8081;
  char          *http_addr = "192.168.0.22";
  struct evhttp *http_server = NULL;

  if (argc > 1)
    {
      strcpy(filename,argv[1]);
      printf("Using %s/n",filename);
    }
  else
    {
      strcpy(filename,DEFAULT_FILE);
    }

  event_init();

  load_file();

  http_server = evhttp_start(http_addr, http_port);
  evhttp_set_gencb(http_server, generic_request_handler, NULL);

  fprintf(stderr, "Server started on port %d/n", http_port);
  event_dispatch();
}

這個服務器的基本原理與前面的示例相同。首先,腳本設置一個 HTTP 服務器,它只響應對基本 URL 主機/端口組合的請求(不處理請求 URI)。第一步是裝載文件 (read_file())。在裝載最初的文件時和在計時器觸發回調時都使用此函數。
read_file() 函數使用 stat() 函數調用檢查文件的修改時間,只有在上一次裝載之后修改了文件的情況下,它才重新讀取文件的內容。此函數通過調用 fread() 裝載文件數據,把數據復制到另一個結構中,然后使用 strcpy() 把數據從裝載的字符串轉移到全局字符串中。
load_file() 函數是觸發計時器時調用的函數。它通過調用 read_file() 裝載內容,然后使用 RELOAD_TIMEOUT 值設置計時器,作為嘗試裝載文件之前的秒數。libevent 計時器使用 timeval 結構,允許按秒和毫秒指定計時器。計時器不是周期性的;當觸發計時器事件時設置它,然后從事件隊列中刪除事件。
使用與前面的示例相同的格式編譯代碼:$ gcc -o basichttpfile basichttpfile.c -levent。
現在,創建作為數據使用的靜態文件;默認文件是 sample.html,但是可以通過命令行上的第一個參數指定任何文件(見 清單 6)。
清單 6. 創建作為數據使用的靜態文件

復制代碼 代碼如下:

$ ./basichttpfile
Loading file: sample.html (8046 bytes)
Server started on port 8081

現在,程序可以接受請求了,重新裝載計時器也啟動了。如果修改 sample.html 的內容,應該會重新裝載此文件并在日志中記錄一個消息。例如,清單 7 中的輸出顯示初始裝載和兩次重新裝載:
清單 7. 輸出顯示初始裝載和兩次重新裝載

復制代碼 代碼如下:

$ ./basichttpfile
Loading file: sample.html (8046 bytes)
Server started on port 8081
Reloading file: sample.html (8047 bytes)
Reloading file: sample.html (8048 bytes)

注意,要想獲得最大的收益,必須確保環境沒有限制打開的文件描述符數量。可以使用 ulimit 命令修改限制(需要適當的權限或根訪問)。具體的設置取決與您的 OS,但是在 Linux® 上可以用 -n 選項設置打開的文件描述符(和網絡套接字)的數量

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
狠狠综合久久av一区二区小说| 久久久中精品2020中文| 欧美激情精品久久久久久黑人| 欧美亚洲另类制服自拍| 亚洲美女精品成人在线视频| 亚洲精品国产综合区久久久久久久| 久久久久久欧美| 久久视频精品在线| 国产亚洲精品日韩| 久久亚洲欧美日韩精品专区| 97视频在线免费观看| 美日韩在线视频| 欧美在线免费观看| 欧美亚洲另类激情另类| 亚洲va欧美va在线观看| 国产精品国产三级国产aⅴ9色| 午夜精品一区二区三区在线播放| 成人免费xxxxx在线观看| 欧美午夜精品在线| 国产综合福利在线| 欧美中文字幕在线| 亚洲综合av影视| 在线免费看av不卡| 91高潮在线观看| 亚洲欧美一区二区三区久久| 精品日韩视频在线观看| 国模私拍一区二区三区| 国产手机视频精品| 一区二区三区四区在线观看视频| 久久久久九九九九| 26uuu另类亚洲欧美日本老年| 亚洲精品免费在线视频| 国产成人在线视频| 亚洲一区二区三区在线视频| 大桥未久av一区二区三区| 国产欧洲精品视频| 国产精品一区二区久久久久| 国产精品偷伦一区二区| 久久精品国亚洲| 久久久久久午夜| 成人福利免费观看| 久久久久久久久爱| 精品视频久久久| 亚洲xxx视频| 国产婷婷色综合av蜜臀av| 久久深夜福利免费观看| 日韩二区三区在线| 91av在线网站| 97在线免费观看| 精品人伦一区二区三区蜜桃网站| 久久久久久av| 91在线视频九色| 精品一区精品二区| 国产精品精品久久久| 久久精品亚洲94久久精品| 一区二区三区视频免费在线观看| 成人写真福利网| 国产精品久久久久久久av大片| 欧美大尺度激情区在线播放| 俺也去精品视频在线观看| 国产性猛交xxxx免费看久久| 久久久亚洲影院| 亚洲午夜性刺激影院| 久久久久久成人| 亚洲欧美中文日韩在线| 精品中文字幕视频| 欧美国产视频一区二区| 日本精品va在线观看| 欧美日韩爱爱视频| 日本19禁啪啪免费观看www| 国产精品电影一区| 亚洲电影免费观看高清完整版在线观看| 97久久伊人激情网| 色婷婷综合成人| 久久视频免费观看| 欧美性猛交xxxx黑人| 揄拍成人国产精品视频| 91夜夜未满十八勿入爽爽影院| 精品视频9999| 精品成人在线视频| 中文字幕在线日韩| 国产精品久久久久av| 国产精品美乳一区二区免费| 欧美日韩国产色视频| 91视频免费在线| 26uuu另类亚洲欧美日本老年| 777777777亚洲妇女| 久久夜精品va视频免费观看| 欧美老女人在线视频| 亚洲国产精品久久久久| 日韩精品丝袜在线| 国产欧美va欧美va香蕉在线| 久久精品成人欧美大片古装| 日韩小视频在线| 国产精品极品尤物在线观看| 亚洲精品视频在线播放| 91精品国产高清自在线| 欧美午夜性色大片在线观看| 日韩一级裸体免费视频| 久久人人爽人人爽爽久久| 亚洲最大福利视频网| 亚洲欧美国产视频| 欧美视频在线观看免费网址| 亚洲综合社区网| 亚洲国产另类 国产精品国产免费| 性亚洲最疯狂xxxx高清| 中文字幕亚洲一区二区三区五十路| 国产精品久久久久久久午夜| 日韩av网址在线观看| www.日韩av.com| 欧美贵妇videos办公室| 色综合老司机第九色激情| 久热在线中文字幕色999舞| 超碰精品一区二区三区乱码| 欧美日产国产成人免费图片| 中文字幕欧美视频在线| 中文日韩在线视频| 国产免费一区二区三区香蕉精| 91久久久久久久一区二区| 亚洲国产成人久久综合| 国产精品久久一区主播| 欧美激情视频在线| 日韩精品免费在线播放| 欧美高清在线观看| 国产91精品视频在线观看| 日韩av有码在线| 92福利视频午夜1000合集在线观看| 欧美性猛交xxxx乱大交| 欧美超级乱淫片喷水| 亚洲人a成www在线影院| 一区二区成人av| 亚洲欧美日韩直播| 国产精品欧美一区二区三区奶水| 色妞色视频一区二区三区四区| 在线观看精品国产视频| 庆余年2免费日韩剧观看大牛| 成人信息集中地欧美| 精品少妇一区二区30p| 国产精品入口日韩视频大尺度| 日韩欧美精品中文字幕| 亚洲欧美日韩天堂| 午夜精品在线视频| 日本一本a高清免费不卡| 97色伦亚洲国产| 欧美激情欧美狂野欧美精品| 久久精品色欧美aⅴ一区二区| 日韩中文字幕不卡视频| 91情侣偷在线精品国产| 日韩欧美在线中文字幕| 亚洲精品一区二三区不卡| 5566日本婷婷色中文字幕97| 日韩欧美国产骚| 亚洲一区二区三区在线免费观看| 日本国产一区二区三区| 色婷婷久久av| 亚洲国产毛片完整版| 国产主播在线一区| 最近2019好看的中文字幕免费| 亚洲女人被黑人巨大进入al| 精品国产一区二区三区久久久| 久久久久久久影院| 亚洲xxx自由成熟| 国产一区二区三区中文| 久久久999国产精品|