static void mylog_putc(char ch) { if (is_mylog_full()) { mylog_read = (mylog_read + 1) % MYLOG_BUF_SIZE; if (((mylog_read_flag + 1) % MYLOG_BUF_SIZE) == mylog_read) mylog_read_flag = mylog_read; } mylog_buf[mylog_write] = ch; mylog_write = (mylog_write + 1) % MYLOG_BUF_SIZE; wake_up_interruptible(&mymsg_waitq); }
static void mylog_putc(char c) { if (is_mylog_full()) { /* 丢弃一个数据 */ mylog_r = (mylog_r + 1) % MYLOG_BUF_LEN; if ((mylog_r_for_read + 1) % MYLOG_BUF_LEN == mylog_r) { mylog_r_for_read = mylog_r; } } mylog_buf[mylog_w] = c; mylog_w = (mylog_w + 1) % MYLOG_BUF_LEN; /* 唤醒等待数据的进程 */ wake_up_interruptible(&mymsg_waitq); /* 唤醒休眠的进程 */ }