kfifo 試す (7)
毎週月曜体調悪い。
家人の所用にて早めに帰宅後、メシ食って tail -f を試してみた。
ちなみに read なソレは以下
static ssize_t yamanetoshi_read(struct file *file, char __user *buf, size_t size, loff_t *offset) { int ret = 0, len = 0; unsigned char *ptr = NULL; printk("read start\n"); if(0 == kfifo_len(fifo_ptr)) { if(0 == write_open) { return 0; } else { read_sleep = TRUE; interruptible_sleep_on(&queue); } } len = kfifo_len(fifo_ptr); if(size>len) size = len; ptr = kmalloc(size, GFP_KERNEL); if(!ptr) return -ENOMEM; ret = kfifo_get(fifo_ptr, ptr, size); if(copy_to_user(buf, ptr, ret)) ret = -EFAULT; kfree(ptr); printk("read end\n"); return ret; }
write を open しない状態で
$ tail -f ./fifo101130
したら延々と read start が出力される。ただし、write が open されたら正常に出力されていて、Ctrl-d で cat なプロセスが終わったら再度 read start が延々。
よく考えたら tail -f は EOF 受けても終わっちゃ駄目か。
で、両方 cat してみたら当たり前ですが、きちんと動いた。使う道具はきちんと選びましょう、というのが教訓ですか??