亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12
最近訪問板塊 發(fā)新帖
樓主: zhoulifa
打印 上一主題 下一主題

如果在關(guān)機前保存數(shù)據(jù)? [復(fù)制鏈接]

論壇徽章:
0
11 [報告]
發(fā)表于 2006-09-04 13:15 |只看該作者
有了上面這個例子,我們就可以完成一個關(guān)機前保存數(shù)據(jù)的程序了。

首先,C程序代碼如下:


  1. #include <sys/types.h>
  2. #include <time.h>
  3. #include <signal.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <unistd.h>

  7. #define SIGTOCAP SIGTERM

  8. void sighandler(int);
  9. char status;
  10. time_t t;

  11. /************關(guān)于本文檔********************************************
  12. *filename: SaveData.c
  13. *purpose: 展示如何在關(guān)機前保存數(shù)據(jù)
  14. *wrote by: zhoulifa(zhoulifa@163.com) 周立發(fā)(http://zhoulifa.bokee.com)
  15. Linux愛好者 Linux知識傳播者 SOHO族 開發(fā)者 最擅長C語言
  16. *date time:2006-09-02 22:11:54
  17. *Note: 任何人可以任意復(fù)制代碼并運用這些文檔,當(dāng)然包括你的商業(yè)用途
  18. * 但請遵循GPL
  19. *Hope:希望越來越多的人貢獻自己的力量,為科學(xué)技術(shù)發(fā)展出力
  20. *         科技站在巨人的肩膀上進步更快!感謝有開源前輩的貢獻!
  21. *********************************************************************/
  22. int main(int argc, char ** argv)
  23. {
  24.   FILE * fp = 0;

  25.   if(fork()) exit(0);
  26.   if(fork()) exit(0); /* 變成 daemon 精靈程序進行后臺服務(wù) */

  27.   signal(SIGTOCAP, sighandler); /* 捕捉退出信號 */
  28.   if(!(fp = fopen("/var/run/save-data.pid", "w"))) {
  29.     fprintf(stdout, "cannot open file '/var/run/save-data.pid'\n");
  30.     exit(1);
  31.   }
  32.   fprintf(fp, "%d\n", getpid()); /* 保存運行程序的 pid */
  33.   fclose(fp);

  34.   if(!(fp = fopen("/home/test/running.data", "a+"))) {
  35.     fprintf(stdout, "cannot open file '/home/test/running.data'\n");
  36.     exit(1);
  37.   }
  38.   status = 0;
  39.   while(1) {
  40.     t = time(0);
  41.     fprintf(fp, "now running at %s\n", ctime(&t)); /* 每隔一定時間寫一些數(shù)據(jù),表明程序在運行 */
  42.     if(status) break; /* 如果收到退出信號,并保存完數(shù)據(jù), 則退出程序運行 */
  43.     usleep(1000000);
  44.   }
  45.   fclose(fp);
  46.   remove("/var/run/save-data.pid"); /* 退出前刪除 pid 文件 */
  47.   return 0;
  48. }

  49. void sighandler(int sig)
  50. {
  51.   FILE * fp = 0;
  52.   int i = 0;
  53.   if(sig == SIGTOCAP) { /* 捕捉到退出信號后開始保存數(shù)據(jù) */
  54.     if(!(fp = fopen("/home/test/saving.data", "a+"))) {
  55.       fprintf(stdout, "cannot open file '/home/test/saving.data'\n");
  56.       exit(-1);
  57.     }
  58.     for(i = 0; i < 10000; i++) {
  59.       t = time(0);
  60.       fprintf(fp, "now get ready to exit at %s\n", ctime(&t));
  61.     }
  62.     fclose(fp);
  63.     status= 1; /* 數(shù)據(jù)保存完畢,設(shè)置退出標志 */
  64.   }
  65. }
復(fù)制代碼


然后編譯此程序:
gcc SaveData.c -o save-data

再把這個程序放到/bin目錄下去:
mv save-data /bin


然后編寫一個腳本/etc/init.d/save-data,內(nèi)容如下:

  1. #!/bin/sh
  2. #
  3. # $Id: save-data.init.d,v 1.0.0.0 2006/09/02 22:11:54
  4. #

  5. test -x /bin/save-data || exit 0

  6. MYPID=/var/run/save-data.pid

  7. case "$1" in
  8.         start)
  9.                 echo -n "Starting save-data daemon: "
  10.                 echo -n ""
  11.                 sleep 10 # Just for test , you'd better delete this line for use
  12.                 start-stop-daemon --start --quiet --pidfile $MYPID --exec /bin/save-data
  13.                 if [ -f "$MYPID" ] && ps h `cat "$MYPID"` >/dev/null; then
  14.                         echo " OK."
  15.                 else
  16.                         echo " Failed."
  17.                 fi
  18.                 ;;
  19.         stop)
  20.                 echo -n "Stopping save-data daemon: save-data"
  21.                 echo -n ""
  22.                 sleep 10 # Just for test , you'd better delete this line for use
  23.                 start-stop-daemon --stop --quiet --pidfile $MYPID
  24.                 echo "."
  25.                 ;;
  26.         restart | force-reload)
  27.                 $0 stop
  28.                 sleep 2
  29.                 $0 start
  30.                 ;;
  31.         *)
  32.                 echo "Usage: /etc/init.d/save-data {start|stop|restart}"
  33.                 exit 1
  34. esac

  35. exit 0
復(fù)制代碼


再創(chuàng)建鏈接:
ln -s /etc/init.d/save-data /etc/rc2.d/S70save-data
ln -s /etc/init.d/save-data /etc/rc0.d/K10save-data


然后重啟機器試試,會看到數(shù)據(jù)被保存到saving.data文件里了

論壇徽章:
0
12 [報告]
發(fā)表于 2006-09-04 13:18 |只看該作者
關(guān)于“ daemon 精靈程序 ” , 我這里只是簡單的 fork 了兩次,事實上還有其它許多工作要做,比如關(guān)閉終端, google 一下很多的,就不贅述了
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP