FIFO做为一种有名管道的形式,在unix下编程经常会用到,在AIX和Solaris上用ls -l能像查看普通文件一样,很方便的看到当前FIFO里面还剩余多少字节未被读取,但是linux下却不行。通过调用ioctl可以实现这个功能:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
int main()
{
int fd = open("test.q", O_RDWR);
if (fd<0)
{
perror("open fifo:");
return -1;
}
int n;
int ret;
while(1){
ret = ioctl(fd, FIONREAD, &n);
printf("%d %d\n", ret, n);
sleep(5);
}
}
上面是一个实例代码,主要功能是
ret = ioctl(fd, FIONREAD, &n);
通过使用上述程序,你可以使用下面这个命令往test.q这个FIFO里面写数据,上面的程序会打印出test.q里面剩下的字节数
cat > test.q
分享到:
相关推荐
当剩余字节数为 0 时,块传输结束。 #### 四、DMA 映射 ##### 4.1 DMA 映射的基础 对于任何类型的 DMA 传输,都需要提供源地址和目的地址,以及要传输的字节数。在外围 DMA 的情况下,外围设备的 FIFO 既可以作为...
1.该文件夹下所有的文件示例,都是基于宋宝华《 linux设备驱动程序开发详解,基于最新4.0内核》写的,所有的代码都经过了调试和验证并附有日志文档。2.globalfifo是在堆内存里面通过kzalloc()函数申请的一段内存,...
5. 数据批量读取:当RXFIFO中的数据达到59个字节时,GDO2中断被触发,此时从FIFO中读出59个字节,剩余待接收数据为152 - 59 = 93字节。这种分批读取有助于降低内存压力并提高处理效率。 6. 继续读取:接下来,当...
### Linux 进程间通信详解 #### 一、管道及有名管道 在深入探讨Linux中的进程间通信(IPC)机制之前,我们先了解一个基本概念:**进程**。进程是程序执行的一个实例,每个进程都有自己的地址空间。当多个进程需要...
在Linux系统的 `/dev` 目录下,所有的设备文件(节点)都被创建,包括字符设备、块设备,以及像管道(FIFO)、套接字(Socket)、符号链接和目录等其他类型的特殊文件。这些特殊文件并不具有主次设备号。 设备号的...
### Linux C 编程一站式学习知识点汇总 #### 一、C语言入门 ##### 1. 程序的基本概念 - **程序与编程语言**:程序是由一系列指令组成的,用于解决特定问题或执行特定任务。编程语言是编写这些指令的方式,它们被...
`continue`语句用于跳过当前循环迭代中剩余的部分,并进入下一次循环,而不是完全跳出循环。 ### 20. 二叉树第n层的最大节点数 对于一棵二叉树来说,第n层的结点数最多是`2^(n-1)`。因此,在第5层,结点数最多为`2...
- `memory_node`结构体表示内存节点,包含剩余最大空间、使用大小、总大小、进程ID和标志位等信息。 - `pfc_struct`结构体用于管理页面置换的帧链表。 ### 页面置换算法 - 页面置换算法用于管理物理内存中的页面。...
- 开发工具:gcc/g++和Visual C++ 6.0,分别用于Linux和Windows下的编译。 小组成员分工明确,通过编写代码实现了进程与线程的状态管理,以及不同的调度算法,同时考虑了虚拟内存管理和进程通信。这些功能的实现有...
在Linux/Unix系统中,文件类型包括block(块设备文件,如磁盘分区、软驱和CD-ROM)、char(字符设备文件,如键盘和打印机)、dir(目录文件)、fifo(命名管道,用于进程间通信)、file(普通文件,如文本和可执行...