c語言用戶操作日誌,c++ 日誌系統

本文目錄一覽:

C語言寫日誌庫時怎樣做到能每天生成一個新文件,甚至能刪除很舊的日誌?

#include stdio.h

#include time.h

int main()

{

FILE *fp = NULL;

char logName[20]={0};

time_t timep;

struct tm *p;

time(timep);

p = gmtime(timep);

sprintf(logName,”%d%02d%02d.txt”,(1900+p-tm_year), (1+p-tm_mon), p-tm_mday);

fp = fopen(logName,”a+”);

fputs(“test log\n”,fp);

fclose(fp);

return 0;

}

//每天創建一個新文件,當天日誌都會追加到這個文件

至於刪除文件也是一個道理,只要知道你要刪除多少天前的,

拼接出名字直接刪除就好

如何記錄操作日誌

那你就用文本的方式記錄下來,這就要文件操作了,

在C語言中,文件的操作是通過FILE結構體進行了

比如:

FILE *pFile = fopen(“1.txt”,”w”);

fwrite(s1,1,strlen(s1),pFile);

C語言編寫 年曆顯示程序

此題不是很難,我會前三個

關鍵是算那一年的第一天是周幾

給你個基本算法,一年是365天,閏年366天

364是7的倍數,這樣一年多出一天,中間多少個閏年,在加上相應的天數即可

400年多出來的天數是400+97=497也是7的倍數,那麼400年一輪迴,這樣就算400年以內的即可

一個子函數,返回這一年的第一天是周幾,很好做

int ye(int year)

{

int y=year%400;

int day=y;

int i;

for(i=0;iy;i++)

if(閏年判斷)

day++;

return day%7;

}

做一個月份天數的全局數組

int mo[12]={31,28,31,30,31,30,31,31,30,31,30,31};

需要時用一個if判斷閏年改變m0[1]的值是28還是29

打印子函數,有一個小技巧,就是每個月前面的空缺部分,這個1月份是ye子函數的返回值,後面的你看和前面月份是不是重合啊,吧這個記錄下來在下一月份用即可

1 2

3 4

這樣月份排列更好打印一些,你的那個截圖有點麻煩

int pr(int year)

{

int k=ye(year);

int i,j,;

if(閏年判斷)

mo[1]=29;

else

mo[1]=28;

for(i=0;i12;i++)

{

printf(“周幾英文的打印”);

for(j=0;jk;j++)

printf(“一般是四個空格,就是月份前面空缺的打印”);

for(j=1;j=mo[i];j++)

{

printf(“%4d”,j);

k++;

if((k+j)%7==0)

printf(“\n”);

}

k%=7;

if(k!=0)

printf(“\n”);

}

}

如果像你那樣,感覺需要賦值一個大一點的數組,在吧數組打印出來更好,呵呵

LINUX下C語言編程怎麼打印日誌

我們的程序一般都會產生輸出信息。但是服務器程序一般卻不希望輸出信息到屏幕上,因為沒有人盯着你的程序執行。所以我們要把一些信息寫成日誌文件,正常情況下運行程序的人不用關心日誌里的內容,只有在出現問題的時候才會查看日誌文件里的內容以確定問題所在。

但如果我們的程序要自己生成一個文件來保存日誌卻不是好主意,因為這一方面增加了維護程序運行的人的負擔,另一方面自己維護起系統來也多有不便。

在Linux系統中有一個系統日誌,通常放在/var/log目錄下,比如文件名是syslog的,系統中的一些程序產生的日誌信息都會存放到這個文件里。日誌文件有固定的格式,比如第1列是消息產生的時間,第2列是機器名(因為日誌記錄程序支持遠程連接),第3列是標記信息(一般就是程序名稱)等。而且對應的有一些工具來對這個日誌進行維護,比如通過輪迴機制保證日誌文件大小不會把磁盤空間佔盡。所以我們把自己程序的信息也寫到這個系統日誌里是比較好的想法。

在GNU C語言庫提供的內容中,有接口可以用來做這件事。用下面的命令查看:

nm -D /lib/libc.so.6 | grep log

可以看到一些調用:

000b9410 T closelog

0008b870 T getlogin

0008b960 T getlogin_r

000d0180 T __getlogin_r_chk

000bd190 T klogctl

00027450 T __open_catalog

000b9380 T openlog

0008bae0 T setlogin

000b8b80 T setlogmask

000b9350 T syslog

000b9320 T __syslog_chk

000b92f0 T vsyslog

000b8da0 T __vsyslog_chk

這裏面的三個函數openlog, syslog, closelog是一套系統日誌寫入接口。另外那個vsyslog和syslog功能一樣,只是參數格式不同。

程序的用法示例代碼如下:

#include syslog.h

int main(int argc, char **argv)

{

    openlog(“MyMsgMARK”, LOG_CONS | LOG_PID, 0);

    syslog(LOG_DEBUG,

           “This is a syslog test message generated by program ‘%s’\n”,

           argv[0]);

    closelog();

    return 0;

}

編譯生成可執行程序後,運行一次程序將向/var/log/syslog文件添加一行信息如下:

   Feb 12 08:48:38 localhost MyMsgMARK[7085]: This is a syslog test message generated by program ‘./a.out’

Feb 12 08:48:38 localhost MyMsgMARK[7085]: This is a syslog test message generated by program ‘./a.out’

  LOG_CONS

              Write directly to system console if there is an error while sending to system logger.

       LOG_NDELAY

              Open the connection immediately (normally, the connection is opened when the first message is logged).

       LOG_NOWAIT

              Don』t  wait  for  child processes that may have been created while logging the message.  (The GNU C library does not create a

              child process, so this option has no effect on Linux.)

       LOG_ODELAY

              The converse of LOG_NDELAY; opening of the connection is delayed until syslog() is called.  (This is the  default,  and  need

              not be specified.)

       LOG_PERROR

              (Not in SUSv3.) Print to stderr as well.

       LOG_PID

              Include PID with each message.

第三個參數指明記錄日誌的程序的類型。

syslog函數及參數

syslog函數用於把日誌消息發給系統程序syslogd去記錄,此函數原型是:

void syslog(int priority, const char *format, …);

第一個參數是消息的緊急級別,第二個參數是消息的格式,之後是格式對應的參數。就是printf函數一樣使用。

如果我們的程序要使用系統日誌功能,只需要在程序啟動時使用openlog函數來連接syslogd程序,後面隨時用syslog函數寫日誌就行了。

另外,作為syslog的替代程序的新一代工具是syslog-ng,syslog-ng具有很強的網絡功能,可以方便地把多台機器上的日誌保存到一台中心日誌服務器上。

有什麼好的方法實現系統的操作日誌

C語言詞彙

在C語言中使用的詞彙分為六類:標識符,關鍵字,運算符,分隔符,常量,注釋符等。

1.標識符

在程序中使用的變量名、函數名、標號等統稱為標識符。除庫函數的函數名由系統定義外,其餘都由用戶自定義。C 規定,標識符只能是字母(A~Z,a~z)、數字(0~9)、下劃線(_)組成的字符串,並且其第一個字符必須是字母或下劃線。

以下標識符是合法的:

a, x, x3, BOOK_1, sum5

以下標識符是非法的:

3s 以數字開頭

s*T 出現非法字符*

-3x 以減號開頭

bowy-1 出現非法字符-(減號)

原創文章,作者:MZSJ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/147991.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MZSJ的頭像MZSJ
上一篇 2024-11-02 13:13
下一篇 2024-11-02 13:13

相關推薦

  • Python棧操作用法介紹

    如果你是一位Python開發工程師,那麼你必須掌握Python中的棧操作。在Python中,棧是一個容器,提供後進先出(LIFO)的原則。這篇文章將通過多個方面詳細地闡述Pytho…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Cron執行日誌用法介紹

    本文將從多個方面對cron執行日誌進行詳細闡述,包括cron執行日誌的定義、cron執行日誌的產生原因、cron執行日誌的格式以及如何解讀cron執行日誌。 一、定義 Cron是一…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Hibernate日誌打印sql參數

    本文將從多個方面介紹如何在Hibernate中打印SQL參數。Hibernate作為一種ORM框架,可以通過打印SQL參數方便開發者調試和優化Hibernate應用。 一、通過配置…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python磁盤操作全方位解析

    本篇文章將從多個方面對Python磁盤操作進行詳細闡述,包括文件讀寫、文件夾創建、刪除、文件搜索與遍歷、文件重命名、移動、複製、文件權限修改等常用操作。 一、文件讀寫操作 文件讀寫…

    編程 2025-04-29

發表回復

登錄後才能評論