orzechtbg

S02.LAB3.ZAD3

Apr 5th, 2018
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.62 KB | None | 0 0
  1. #include <linux/module.h>
  2. #include <linux/slab.h>
  3. #include <linux/list.h>
  4.  
  5. #define SIZE 10
  6.  
  7. static int elements = 0;
  8. static int values[SIZE];
  9.  
  10.  
  11. module_param_array(values, int, &elements, 0644);
  12. MODULE_PARM_DESC(values, "Wartosci poczatkowe kolejki FIFO");
  13.  
  14. static LIST_HEAD(fifo);
  15.  
  16. struct fifo_struct {
  17.     int data;
  18.     struct list_head fifo_element;
  19. };
  20.  
  21. static void enqueue(int data)
  22. {
  23.     struct fifo_struct *element = (struct fifo_struct *) kmalloc(sizeof(struct fifo_struct), GFP_KERNEL);
  24.     if (!IS_ERR(element)) {
  25.         element->data = data;
  26.         INIT_LIST_HEAD(&element->fifo_element); //inicjalizacja wskaznikow w jej pojedynczym elemencie
  27.         list_add_tail(&element->fifo_element, &fifo); //funckja dodajaca nowy element na przed elementem glownym(fifo) 
  28.     } else {
  29.         pr_alert("Blad\n");
  30.     }
  31. }
  32.  
  33. static int __init program_init(void)
  34. {
  35.     int i;
  36.  
  37.     pr_cont("Wartosci dodane:");
  38.     for (i = 0; i < elements; i++) {
  39.         enqueue(values[i]);
  40.         pr_cont(" %d", values[i]);
  41.     }
  42.     pr_cont("\n");
  43.  
  44.     return 0;
  45. }
  46.  
  47. static void __exit program_exit(void)
  48. {
  49.     struct fifo_struct *element, *next;
  50.  
  51.     pr_cont("Wartosci zdjete:");
  52.     list_for_each_entry_safe(element, next, &fifo, fifo_element) //funkcja przegladajaca liste za pomcoa wskaznika, podczas przegladania usuwa elementy
  53.   {
  54.         list_del(&element->fifo_element);  //funcja usuwajaca element z listy
  55.         pr_cont(" %d", element->data);
  56.         kfree(element); //zwalnia pamiec przydzielona na element
  57.     }
  58.     pr_cont("\n");
  59. }
  60.  
  61. module_init(program_init);
  62. module_exit(program_exit);
  63.  
  64. MODULE_AUTHOR("Michal Ortyl, Piotr Putowski");
  65. MODULE_DESCRIPTION("3pkt, zadanie nr.3");
  66. MODULE_LICENSE("GPL");
Advertisement
Add Comment
Please, Sign In to add comment