在Linux内核中,很多驱动程序都会用到kfifo_put函数来处理数据的读写。比如网络设备驱动程序可以使用kfifo_put函数来实现数据包的接收和发送。另外,一些文件系统也会使用kfifo_put函数来处理数据的读写操作。总的来说,kfifo_put函数在Linux内核中有着广泛的应用。 除了kfifo_put函数外,Linux内核还提供了一系列的函数来...
kfifo的巧妙之处在于in和out定义为无符号类型,在put和get时,in和out都是增加,当达到最大值时,产生溢出,使得从0开始,进行循环使用。put和get代码如下所示: static inline unsigned int kfifo_put(struct kfifo *fifo, const unsigned char *buffer, unsigned int len) { unsigned long flags; unsigned int ret;...
这样的好处不言而喻--对kfifo->size取模运算可以转化为与运算,如:kfifo->in % kfifo->size 可以转化为 kfifo->in & (kfifo->size – 1) kfifo的巧妙之处在于in和out定义为无符号类型,在put和get时,in和out都是增加,当达到最大值时,产生溢出,使得从0开始,进行循环使用。put和get代码如下所示: 1 stati...
kfifo的巧妙之处在于in和out定义为无符号类型,在put和get时,in和out都是增加,当达到最大值时,产生溢出,使得从0开始,进行循环使用。put和get代码如下所示: 代码语言:javascript 代码运行次数:0 复制Cloud Studio 代码运行 static inline unsigned int kfifo_put(struct kfifo *fifo, const unsigned char *buffer,...
kfifo的巧妙之处在于in和out定义为无符号类型,在put和get时,in和out都是增加,当达到最大值时,产生溢出,使得从0开始,进行循环使用。put和get代码如下所示: 1static inline unsignedint kfifo_put(struct kfifo *fifo,2const unsignedchar *buffer, unsignedintlen)3{4 unsignedlongflags;5 unsignedintret;6 spin...
(2)put一个buffer后 (3)get一个buffer后 (4)当此时put的buffer长度超出in到末尾长度时,则将剩下的移到头部去 3、测试程序 仿照kfifo编写一个ring_buffer,现有线程互斥量进行并发控制。设计的ring_buffer如下所示: 1/**@brief 仿照linux kfifo写的ring buffer2*@atuher Anker date:2013-12-183* ring_buffer...
//创建 kfifo_alloc(fifo, size, gfp_mask) //初始化 kfifo_init(fifo, buffer, size) //释放 kfifo_free(fifo) //写数组 kfifo_put(fifo, val) //读数组 kfifo_get(fifo, val) //读数组但不移除 kfifo_peek(fifo, val) //写多个数据 kfifo_in(fifo, buf, n) //读多个数据 kfifo_out(fifo,...
向kfifo中写入数据:使用kfifo_put函数向kfifo中写入数据。 unsigned char data_to_write = 'A'; kfifo_put(&my_fifo, &data_to_write, sizeof(data_to_write)); 复制代码 从kfifo中读取数据:使用kfifo_get函数从kfifo中读取数据。 unsigned char data_read; kfifo_get(&my_fifo, &data_read, sizeof(dat...
kfifo_put函数是对Linux内核中的一种缓冲区进行操作的函数,它用来向缓冲区中添加数据。这个函数虽然看似简单,但其实却有着非常重要的作用。kfifo_put函数的作用是往缓冲区中添加数据,这样可以实现往缓冲区中写入数据,如果缓冲区有剩余空间,则可以顺利写入数据。如果缓冲区已经满了,那么写入操作将会失...
put和get在调用__put和__get过程都进行加锁,防止并发。从代码中可以看出put和get都调用两次memcpy,这针对的是边界条件。例如下图:蓝色表示空闲,红色表示占用。 (1)空的kfifo, (2)put一个buffer后 (3)get一个buffer后 (4)当此时put的buffer长度超出in到末尾长度时,则将剩下的移到头部去 ...