/* * This module shows how to create a byte stream fifo.
*/
/* fifo size in elements (bytes) */ #define FIFO_SIZE 32
/* name of the proc entry */ #define PROC_FIFO "bytestream-fifo"
/* lock for procfs read access */ static DEFINE_MUTEX(read_access);
/* lock for procfs write access */ static DEFINE_MUTEX(write_access);
/* * define DYNAMIC in this example for a dynamically allocated fifo. * * Otherwise the fifo storage will be a part of the fifo structure.
*/ #if 0 #define DYNAMIC #endif
printk(KERN_INFO "byte stream fifo test start\n");
/* put string into the fifo */
kfifo_in(&test, "hello", 5);
/* put values into the fifo */ for (i = 0; i != 10; i++)
kfifo_put(&test, i);
/* show the number of used elements */
printk(KERN_INFO "fifo len: %u\n", kfifo_len(&test));
/* get max of 5 bytes from the fifo */
i = kfifo_out(&test, buf, 5);
printk(KERN_INFO "buf: %.*s\n", i, buf);
/* get max of 2 elements from the fifo */
ret = kfifo_out(&test, buf, 2);
printk(KERN_INFO "ret: %d\n", ret); /* and put it back to the end of the fifo */
ret = kfifo_in(&test, buf, ret);
printk(KERN_INFO "ret: %d\n", ret);
/* skip first element of the fifo */
printk(KERN_INFO "skip 1st element\n");
kfifo_skip(&test);
/* put values into the fifo until is full */ for (i = 20; kfifo_put(&test, i); i++)
;
/* show the first value without removing from the fifo */ if (kfifo_peek(&test, &i))
printk(KERN_INFO "%d\n", i);
/* check the correctness of all values in the fifo */
j = 0; while (kfifo_get(&test, &i)) {
printk(KERN_INFO "item = %d\n", i); if (i != expected_result[j++]) {
printk(KERN_WARNING "value mismatch: test failed\n"); return -EIO;
}
} if (j != ARRAY_SIZE(expected_result)) {
printk(KERN_WARNING "size mismatch: test failed\n"); return -EIO;
}
printk(KERN_INFO "test passed\n");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.