Այսօր հավելվածների և համակարգային ծրագրերի մեծ մասը պարբերաբար տեղեկատվություն է խնայում իրենց աշխատանքի ընթացքի, տեղեկամատյաններ կոչվող հատուկ տեղեկամատյանների սխալների և խափանումների մասին: Ընդհանուր նշանակության գործառնական համակարգերի մեծամասնությունը մատուցում է ծառայություններ, որոնք թույլ են տալիս գրել տեղեկամատյաններ ՝ օգտագործելով ստանդարտ ծրագրավորման միջերես:
Անհրաժեշտ է
- - C կազմող;
- - Windows Platform SDK;
- - Մշակել փաթեթ glibc- ի համար:
Հրահանգներ
Քայլ 1
Ձեր ընտանիքի Windows- ի գործառնական համակարգերի տակ աշխատելու համար ձեր դիմումից համակարգի տեղեկամատյաններին ավելացրեք օժանդակ գրառումներ գրելու համար:
Օգտագործեք RegisterEventSource API գործառույթը ՝ հայտը որպես իրադարձության աղբյուր գրանցելու համար, ReportEvent գործառույթը ՝ գրանցամատյանում գրառում ավելացնելու համար, և DeregisterEventSource գործառույթը ՝ RegisterEventSource- ի կողմից վերադարձված բռնակը փակելու համար:
Դիմումի նախաստորագրման ժամանակ իմաստ ունի զանգահարել RegisterEventSource- ին և անընդհատ պահպանել վերադարձված նկարագրիչը, որպեսզի տեղեկամատյանում գրառումները տեղադրվեն ծրագրի տարբեր վայրերից: Windows գրքում գրելու ամենապարզ օրինակը կարող է նման լինել.
HANDLE hLog = RegisterEventSource (NULL, "MyApplicationName");
եթե (hLog! = NULL)
{
եթե (ReportEvent (hLog, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, «Հաղորդագրության տեքստ / 0», NULL))
{
// իրադարձությունը հաջողությամբ մուտքագրվեց
}
DeregisterEventSource (hLog);
}
ReportEvent գործառույթի իմաստաբանության մասին ավելի մանրամասն կարելի է գտնել MSDN- ում ՝ https://msdn.microsoft.com/en-us/library/windows/desktop/aa363679%28v=vs.85%29.aspx: Ի լրումն, դուք պետք է որոշ տվյալներ տեղադրեք ծրագրի գործադիր մոդուլի վերաբերյալ համակարգի գրանցամատյանում և հատուկ ձևաչափով ռեսուրսներ ավելացնեք բուն մոդուլին կամ երրորդ կողմի դինամիկ գրադարանին: Իրադարձությունների գրանցման ծառայության գրանցամատյանի բանալիների վերաբերյալ լրացուցիչ տեղեկությունների համար տե՛ս
Քայլ 2
Linux- ի համատեղելի գործառնական համակարգեր մուտք գործելը սովորաբար կարող է իրականացվել syslog daemon- ի միջոցով: Այս ծառայությունն ունի դիմումի մակարդակի ինտերֆեյս `գործառույթների ամբողջության տեսքով, որի հայտարարագրերը տեղադրվում են syslog.h վերնագրի ֆայլում:
Օգտագործեք openlog գործառույթը ՝ հավելվածից կամ գրադարանից syslog ծառայության հետ կապ ստեղծելու համար: Messagesանգահարեք syslog կամ vsyslog գործառույթներին ՝ հաղորդագրությունները տեղեկամատյանում տեղադրելու համար: Իրադարձությունների ձայնագրման ավարտից կամ դիմումի ավարտից հետո փակեք կապը ծառայության հետ `զանգահարելով փակման գործառույթ: Բացի այդ, դուք կարող եք կարգաբերել պարամետրերը ՝ անտեսելու համար զանգերը, որոնք իրադարձությունների գրառումներ են ավելացնում որոշակի առաջնահերթությամբ ՝ օգտագործելով setlogmask գործառույթը: Գրքում հաղորդագրություններ գրելու օրինակներից մեկը կարող է նման լինել.
բաց օրագիր ("MyApplication", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
syslog (LOG_NOTICE, «MyApplication- ը մեկնարկում է PID% d- ով», getuid ());
syslog (LOG_INFO, «Տեղեկատվական հաղորդագրություն»);
closelog ();
Syslog API գործառույթների պարամետրերի վերաբերյալ լրացուցիչ տեղեկություններ ստանալու համար տե՛ս libc info փաստաթղթերը:
Քայլ 3
Գրեք տեղեկամատյանները կամայական ֆայլերին `օգտագործելով իրադարձության համառության ենթահամակարգի ձեր սեփական ներդրումը: Այս խնդրի ամենապարզ լուծումներից մեկը գլոբալ շրջանակներում մի քանի գործառույթների ստեղծումն է, որոնցից մեկը լրացնում է տեղեկատվության ռեժիմում հատուկ անունով ֆայլ, երկրորդը փակում է այն, իսկ երրորդը ավելացնում է իրեն փոխանցված հաղորդագրություն այս ֆայլի պարամետր: Հայեցակարգային տեսանկյունից այս լուծումը հիշեցնում է Linux- ում syslog ծրագրավորման միջերեսը:
Օգտագործեք C ստանդարտ գրադարանի fopen և fclose գործառույթները, համապատասխանաբար, ֆայլ բացելու և փակելու համար: Callանգահարեք fwrite- ին `ֆայլին տեղեկություններ ավելացնելու համար: Կարող եք նաև օգտագործել պլատֆորմի համար հատուկ գործառույթներ (օրինակ, CreatFile- ը Windows- ի տակ) և օգտագործված շրջանակների օբյեկտների մեթոդներ, որոնք ամփոփում են ֆայլերի հետ աշխատելու ֆունկցիոնալությունը: