Пример #1
0
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);
}
Пример #2
0
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);   /* 唤醒休眠的进程 */	
}