本文目錄一覽:
- 1、C語言寫日誌庫時怎樣做到能每天生成一個新文件,甚至能刪除很舊的日誌?
- 2、如何記錄操作日誌
- 3、C語言編寫 年曆顯示程序
- 4、LINUX下C語言編程怎麼打印日誌
- 5、有什麼好的方法實現系統的操作日誌
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-hant/n/147991.html