📄 dmesg.c
字号:
/* * Suck up system messages */#include <stdio.h>#include <sys/param.h>#include <a.out.h>char msgbuf[MSGBUFS];char *msgbufp;int sflg;int of = -1;struct { char *omsgflg; int omindex; char omsgbuf[MSGBUFS];} omesg;struct nlist nl[3] = { {"_msgbuf"}, {"_msgbufp"}};main(argc, argv)char **argv;{ int mem; register char *mp, *omp, *mstart; int samef; if (argc>1 && argv[1][0] == '-') { sflg++; argc--; argv++; } if (sflg) of = open("/usr/adm/msgbuf", 2); read(of, (char *)&omesg, sizeof(omesg)); lseek(of, 0L, 0); sflg = 0; nlist(argc>2? argv[2]:"/unix", nl); if (nl[0].n_type==0) done("No namelist\n"); if ((mem = open((argc>1? argv[1]: "/dev/mem"), 0)) < 0) done("No mem\n"); lseek(mem, (long)nl[0].n_value, 0); read(mem, msgbuf, MSGBUFS); lseek(mem, (long)nl[1].n_value, 0); read(mem, (char *)&msgbufp, sizeof(msgbufp)); if (msgbufp < (char *)nl[0].n_value || msgbufp >= (char *)nl[0].n_value+MSGBUFS) done("Namelist mismatch\n"); msgbufp += msgbuf - (char *)nl[0].n_value; mstart = &msgbuf[omesg.omindex]; omp = &omesg.omsgbuf[msgbufp-msgbuf]; mp = msgbufp; samef = 1; do { if (*mp++ != *omp++) { mstart = msgbufp; samef = 0; pdate(); printf("...\n"); break; } if (mp == &msgbuf[MSGBUFS]) mp = msgbuf; if (omp == &omesg.omsgbuf[MSGBUFS]) omp = omesg.omsgbuf; } while (mp != mstart); if (samef && mstart == msgbufp) exit(0); mp = mstart; do { pdate(); if (*mp) putchar(*mp); mp++; if (mp == &msgbuf[MSGBUFS]) mp = msgbuf; } while (mp != msgbufp); done((char *)NULL);}done(s)char *s;{ register char *p, *q; if (s && s!=omesg.omsgflg && sflg==0) { pdate(); printf(s); } omesg.omsgflg = s; q = omesg.omsgbuf; for (p = msgbuf; p < &msgbuf[MSGBUFS]; ) *q++ = *p++; omesg.omindex = msgbufp - msgbuf; write(of, (char *)&omesg, sizeof(omesg)); exit(s!=NULL);}pdate(){ extern char *ctime(); static firstime; time_t tbuf; if (firstime==0) { firstime++; time(&tbuf); printf("\n%.12s\n", ctime(&tbuf)+4); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -