انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید




نویسنده موضوع: خواندن kernel ring buffer در C  (دفعات بازدید: 330 بار)

0 کاربر و 3 مهمان درحال مشاهده موضوع.

آفلاین Mohammad reza

  • Jr. Member
  • *
  • ارسال: 27
  • جنسیت : پسر
خواندن kernel ring buffer در C
« : 26 شهریور 1397، 04:02 ب‌ظ »
سلام
من در برنامه خودم نیاز به خوندن برخی از لاگ های کرنل رینگ بافر دارم.(میخوام مثلا اگر x بین لاگ ها بود پرینت کنه ok)
چندتا روش از گوگل پیذا کردم:

یک سری ها میگفتن از tail dmesg استفاده کن  :o
یک : فکر میکنم این روش خیلی غیرحرفه.
دو : باید از تایمر استفاده کنم تا هر چند دقیقه/ثانیه یک بار این دستور اجرا کنه. درصورتی که من به Real-time نیاز دارم.
سه : من فقط اخرین لاگ ایجاد شده رو میخوام, درصورتی که این دستور تمام لاگ هارو نشون میده(هرچند میشود بعد از خوندن لاگ از -cبرای clear log استفاده کرد(ولی من نمیخوام clear log انجام بشه)).

یک سری ها میگفتن /proc/kmsg یا /dev/kmsg استفاده کن:
خوندن /dev/kmsg که فرقی با خروجی dmesg نداره !
kmsg هم مشکلش این بود که اگر دو نفر همزمان درحال خوندنش باشن اطلاعات ناقص تحویل میده!

یک سری هاهم میگفتن سورس برنامه dmesg بخون ببین اون چطوری کار میکنه ](*,)
بعد از کلی وقت گذاشتن, فهمیدم که از تابع klogctl استفاده میکنه, ولی متاسفانه من موفق نشدم پیاده سازیش کنم.

دوستان اگر راهی بهتری به ذهنشون میرسه لطفا بگن.
در ضمن(syslog هم ندارم که بخوام لاگ های syslog رو بخونم).



آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4854
  • جنسیت : پسر
  • masoft قدیم
پاسخ : خواندن kernel ring buffer در C
« پاسخ #1 : 26 شهریور 1397، 09:14 ب‌ظ »
می‌تونید از خروجی
dmesg -w
استفاده کنید یا اینکه مستقیما از
/dev/kmsg
بخونید.