顺德网站制作公司哪家好,wordpress SEO化,软文推广文案范文,科技作文一、从FIFO中读取数据#xff1a;
约定#xff1a;如果一个进程为了从FIFO中读取数据而以阻塞的方式打开FIFO#xff0c;则称内核为该进程的读操作设置了阻塞标志。
如果有进程为写而打开FIIF#xff08;写端存在#xff09;#xff0c;且当前FIFO内没有数据#xff0…
一、从FIFO中读取数据
约定如果一个进程为了从FIFO中读取数据而以阻塞的方式打开FIFO则称内核为该进程的读操作设置了阻塞标志。
如果有进程为写而打开FIIF写端存在且当前FIFO内没有数据则对于设置了阻塞标志的读操作来说将一直阻塞对于没有设置阻塞标志读操作来说返回-1当前errno值为EAGAIN提醒以后再试。对于设置阻塞标志的读操作来说造成阻塞的原因有两种当前FIFO内有数据但其他进程正在读这些数据另外FIFO内没有数据。解阻塞的原因则是FIFO中有新的数据写入不论写入数据量的大小也不论读操作请求多少数据量。如果没有进程写打开FIFO则设置了阻塞标志的读操作会阻塞。如果写端关闭管道中有数据读取管道中的数据如果管道没有数据读端将不会继续阻塞此时返回0。注意如果FIFO有数据则设置了阻塞标志的读操作来说不会因为FIFO的字节数小于请求读的字节数而阻塞读操作会返回FIFO现有的数据量。二、向FIFO中写入数据
约定如果一个进程为了向FIFO中写入数据而阻塞打开FIFO那么称该进程内的写操作设置了阻塞标志。
1. 对于设置了阻塞标志的写操作
当写入数据量不大于PIPE_BUF时linux将保证写入的原子性如果此时管道空闲缓冲区不足以容纳要写入的字节数则进入睡眠直到缓冲区中能够写入的字节数才开始进行一次性写操作。当要写入的数据量大于PIPE_BUF时Linux将不再保证写入的原子性。FIFO缓冲区一有空闲写进程就会试图向管道写入数据写操作在写完所有请求写的数据后返回。
2. 对于没有设置阻塞标志的写操作
当要写入的数据量大于PIPE_BUF时Linux将不再保证写入的原子性。在写满所有FIFO空闲缓冲区后写操作返回。当要写入的数据量不大于PIPE_BUF时linux将保证写入的原子性如果当前FIFO空闲缓冲区能够容纳写入的字节数写完成功返回如果当前FIFO空闲缓冲区不能容纳请求写入的字节数则返回EANGIN错误提醒以后再写。