日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

仿照redis写的nginx开机画面

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 仿照redis写的nginx开机画面 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

redis有一個開機畫面:

下面是我寫的的nginx開機畫面:


新建一個文件 asciilogo.h

//仿照redis風格打印一個logo,這樣啟動的時候就不會不注意
char *ascii_logo =
"                                                                                                           \n"
"%s  Port: %d       PID: %ld      http://nginx.org/                                                         \n"
"                                                                                                           \n"
".121           .22,       ,22222222222,       ,22,   121.            121   .22,            ,22,            \n"
"366641         4666,     156666666666662     .5665. 16663          156662  46664,        ,36665.           \n"
"36656641       4666,    15664222222236662    .5665. 16663       .25666562  .2566641    ,366663,            \n"
"3656566641     4666,   15563         25561   .5555. 16663     .256665HM62    .25666411466653.              \n"
"366621466652.  4666,  16653    .......,,,,..  ,,,,  16663   .256664,36662      .2466666652.                \n"
"36661 1466652. 4666, .4665,   3666666555555, .5555. 16563 .356664,  26662        26566563                  \n"
"36661   14666535666,  .4665,  254444456665,  .5665. 16664356664,    26562      146665466652.               \n"
"36561     ,46665566,   .4665,       ,4665,   .5665. 166566653,      26662    1566652  1466652.             \n"
"46661       ,366666,    .466544444445665,    .5665. 1656653,        26663  2566641     1466653.            \n"
"2565,         ,3564.     .4566666666664,      4664. ,5653.          15651  36641          ,4564.           \n";

修改nginx.c

	#include "asciilogo.h" //printf("%s\n",ascii_logo);char *buf = malloc(1024*16);//int port=ntohs(((struct sockaddr_in *)((ngx_listening_t *)cycle->listening.elts)[0].sockaddr)->sin_port);ngx_listening_t  *ls=(ngx_listening_t *)cycle->listening.elts;int port=ntohs(((struct sockaddr_in *)(ls[0].sockaddr))->sin_port);snprintf(buf,1024*16,ascii_logo,NGINX_VER,port,(long) getpid());printf("%s\n", buf);if (ngx_process == NGX_PROCESS_SINGLE) {ngx_single_process_cycle(cycle);} else {ngx_master_process_cycle(cycle);}return 0;


獲取nginx端口:

ntohs(((struct?sockaddr_in?*)((ngx_listening_t?*)cycle->listening.elts)[0].sockaddr)->sin_port);


注意:最好不要用一句長句,不然報錯了都不容易發現。

之前在gdb下可以打印出數據:



然后我就直接將這局拷貝到nginx.c中,因為語法上多了個*,所以怎么也編譯不過去。所以我就非常不解。

然后,只好把長句分開一句句從最里面開始試,后來成功了,其實已經去掉了*,只是自己沒注意到。


但是我還是想知道長句為什么不行,后來QQ群里有人告訴我:


所以這個事兒得出一些結論:

第一:避免使用長句;

第二:不要太相信gdb的表達式,因為他可能做了所謂的小動作;

第三:自己使用gdb的時候盡量用正確的語法,不要亂加*

總結

以上是生活随笔為你收集整理的仿照redis写的nginx开机画面的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。