WikiDer > Printk
printk a C funktsiyasi Linux yadrosi interfeysi xabarlarni yadro jurnaliga chop etadi[1]. Bu satr parametrini qabul qiladi format mag'lubiyati, bu satrga o'zboshimchalik bilan har xil ma'lumotlar turi parametr (lar) ni ko'rsatish usulini belgilaydi[1]. Keyin mag'lubiyat yadro jurnaliga bosiladi[1].
Bu a printf- abstraktsiya singari va uning format satrini va argumentlarini tahlil qilish shunga o'xshash harakat qiladi printf[1]. U yadrodan xabarlarni yozish uchun ushbu funktsiyaga muhtoj bo'lgan yadro dasturchilari uchun disk raskadrovka vositasi sifatida ishlaydi[1].
The printk funktsiya prototipi:
int printk(konst char *fmt, ...);C standart kutubxonasi va uning printf funktsiyasi yadro rejimida mavjud emas, shuning uchun kerak printk[2].
Dan farqlari printf
Funktsiya printk ga asoslangan printf, lekin har doim ham xuddi shunday ishlatilishi mumkin emas printf ishlatilgan[1].
Jurnal darajalari
printk qo'ng'iroq qiluvchiga yuborilayotgan xabar turi va ahamiyatini ko'rsatishga imkon beradi[1]. Ushbu spetsifikator jurnal darajasi deb ataladi[1].
Jurnal darajasi yadro xabarlar jurnaliga yuboriladigan xabar turini belgilaydi[1]. Jurnal darajasi oldindan belgilash bilan belgilanadi (C-dan foydalanib) mag'lubiyatli so'z birikmasi) ishlab chiqariladigan xabarning boshlanishigacha jurnal darajasini tavsiflovchi satr[1]. Masalan, xabarni KERN_INFO quyidagilardan foydalanib:[1]
printk(KERN_INFO "Xabar:% s n", arg);Jurnal darajasini ko'rsatuvchi satr quyidagilardan iborat ASCII sarlavha belgisining boshlanishi, keyin jurnal darajasini tavsiflovchi raqam yoki xabarni ko'rsatish uchun 'c' belgisi oldingi xabarning davomi[1][3]. Quyidagi jurnal darajalari va ularning sharhlari quyida keltirilgan[4].
| 0 | KERN_EMERG | Favqulodda holat; tizim ehtimol o'likdir |
| 1 | KERN_ALERT | Zudlik bilan e'tiborni talab qiladigan muammo |
| 2 | KERN_CRIT | Og'ir holat |
| 3 | KERN_ERR | Xato |
| 4 | KERN_OGOHLANTIRISH | Ogohlantirish |
| 5 | KERN_NOTICE | Oddiy, lekin ehtimol e'tiborga loyiq holat |
| 6 | KERN_INFO | Axborot xabari |
| 7 | KERN_DEBUG | Nosozliklarni tuzatish to'g'risidagi xabar, odatda ortiqcha |
Agar jurnal darajasi ko'rsatilmagan bo'lsa, standart jurnal darajasi KERN_OGOHLANTIRISH[1], agar yadroning o'zida boshqacha sukut o'rnatilmagan bo'lsa[iqtibos kerak].
Jurnal darajalari <linux/kern_levels.h>[3]. Qaysi jurnal sathlari bosilgan va yordamida tuzilgan sysctl fayl / proc / sys / kernel / printk[1].
Pointer formatlari
The % p format ko'rsatgichi (ko'rsatgichlarni chop etish uchun ishlatiladi printf) qo'shimcha formatlash rejimlarini qo'shish uchun kengaytirilgan, masalan, a ni bosib chiqarishni so'rash struct sockaddr * foydalanish % pISpc IPv4 / v6 manzili va portini odamlarga qulay shaklda chop etishi mumkin (masalan, "1.2.3.4:12345" yoki "[1: 2: 3: 4: 5: 6: 7: 8]: 12345")[5].
Suzuvchi nuqta yordami yo'q
Esa printf suzuvchi nuqta raqamlarini chiqarishni qo'llab-quvvatlash, printk emas[5], chunki Linux yadrosi yadro ichida suzuvchi nuqta raqamlaridan foydalanmaydi[6].
Tavsif
Funktsiya semafora tizim konsoliga kirishni boshqarish[1][7]. Agar u muvaffaqiyatli bo'lsa, chiqish qayd qilinadi va konsol drayverlari chaqiriladi[1]. Agar semaforni olishning iloji bo'lmasa, chiqishlar log buferiga joylashtiriladi va konsol semaforining amaldagi egasi konsol semaforini chiqarganda yangi chiqishni sezadi va buferlangan chiqishni semaforni chiqarishdan oldin konsolga yuboradi.[1].
Ushbu kechiktirilgan nashrning bir samarasi - bu qo'ng'iroq qiladigan kod printk va keyin chop etiladigan jurnal sathlari buzilishi mumkin. Buning sababi shundaki, bosib chiqariladigan jurnal darajasi haqiqiy bosib chiqarish sodir bo'lganda tekshiriladi[1].
Funktsiya printk tizim yadrosi yuklash jarayonining dastlabki bosqichlaridan tashqari, tizim konsoli ishga tushirilmaguncha, yadroning istalgan joyidan chaqirilishi mumkin.[4]. Muqobil funktsiya erta_printk ba'zi arxitekturalarda amalga oshiriladi va bir xil ishlatiladi printk yuklash jarayonining dastlabki bosqichlarida[4].
Adabiyotlar
- ^ a b v d e f g h men j k l m n o p q r "Printk bilan xabarlarni jurnalga yozish - Linux yadrosi hujjatlari". www.kernel.org. Olingan 2020-09-09.
- ^ ISO / IEC 9899: 2018. Xalqaro standartlar tashkiloti. 2018 yil.
- ^ a b "kern_levels.h". GitHub. Olingan 2020-09-09.
- ^ a b v "printk ()". arxiv.is. 2007-08-30. Olingan 2020-09-09.
- ^ a b "Qanday qilib printk formatidagi aniqlovchilarni to'g'ri yo'lga qo'yish kerak - Linux yadrosi hujjatlari". www.kernel.org. Olingan 2020-09-09.
- ^ "Re: Linux yadrosi va suzuvchi nuqta". www.redhat.com. Olingan 2020-09-09.
- ^ "Drayv asoslari - Linux yadrosi hujjatlari". www.kernel.org. Olingan 2020-09-09.