HTML

Programozó Páternoszter

Ez a Programozó Páternoszter (PP) blogja, a programozásról szól. Aktualitása, hogy a Debreceni Egyetem Informatikai Kara Magasszintű programozási nyelvek 1-2, C++ esattanulmányok, Java esettanulmányok című kurzusainak blogja is egyben.

A vadászat

A Debreceni Egyetem Programozói Évkönyve: az UDPROG projekt. A szakmai fórumunk a Facebook-en. Az új előadások a prezin.
A régi előadások:
Prog1:
1. C bevezetés
2. C tárgyalás
3. C befejezés
4. C a gyakorlatban
5. C++ bevezetés
6. C++ tárgyalás
7. C++ befejezés
8. C++ a gyakorlatban
9. Java platform bevezetés
10. Kvantuminformatikai alg. bev.
Prog2:
1. Java bevezetés
2. Java tárgyalás
3. Java befejezés
4. Java a gyakorlatban
5. Software Engineering bev.
6. Java EE bevezetés
7. AspectJ bevezetés
8. BPMN-BPEL SOA programozás
9. C++ haladó
10. Tensorflow

Kövess engem!

Friss topikok

Linkblog

A fájlleírók kicsi egész számok - nem mondod

2011.02.19. 14:26 nb

Ez nekem hallgatóként misztikus volt... ezért nézzük most meg pontosabban. Írunk egy olyan GNU/Linux kernelmodult, ami kiírja minden folyamat mellé, hogy melyik a következő szabad fájlleíró. (Ehhez a mese a Linux PCB-ről majd a 3. előadásban.)

Először jöjjön a tapasztalat, kell egy Makefile

[norbi@sgu C]$ more Makefile
obj-m += elso.o
all:
        make -C /lib/modules/`uname -r`/build M=`pwd` modules
clean:
        make -C /lib/modules/`uname -r`/build M=`pwd` clean
        rm *~
S íme első kernel modulod: 

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/list.h>
#include <linux/fdtable.h>

MODULE_DESCRIPTION ("Ez az elso kernel modulom");
MODULE_AUTHOR ("Bátfai Norbert (nbatfai@gmail.com)");
MODULE_LICENSE ("GPL");
static int
elso_init_module (void)
{
  struct task_struct *task;
  struct list_head *p;
  int i = 0;
  
  printk (KERN_NOTICE "Elso modul belep\n");
  
  list_for_each (p, current->tasks.next)
    {
      task = list_entry (p, struct task_struct, tasks);
      i = (task->files)->next_fd;
      printk (KERN_NOTICE "%s %i %i\n", task->comm,
	      task->pid, i);
    }
  return 0;
}

static void
elso_exit_module (void)
{
  printk (KERN_NOTICE "Elso modul kilep\n");
}

module_init (elso_init_module);
module_exit (elso_exit_module);

amit a make paranccsal fordítasz:

[norbi@sgu C]$ make
make -C /lib/modules/`uname -r`/build M=`pwd` modules
make[1]: Entering directory `/usr/src/kernels/2.6.35.10-74.fc14.x86_64'
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: Leaving directory `/usr/src/kernels/2.6.35.10-74.fc14.x86_64'
nincs hiba, lehet root-ként betölteni, majd dmesg-el nézni a kernel üziket:

[root@sgu C]# /sbin/insmod elso.ko
[root@sgu C]# dmesg
...
[16037.915370] bash 3252 3
[16037.915372] qtcreator 4176 19
[16037.915375] bash 4418 3
[16037.915378] ssh 4448 7
[16037.915381] bash 12671 3
[16037.915383] okular 14993 14
...
További példák: PP 173.

 5 kisbajnokság

Annak, aki ugyanezt először megírja, de úgy, hogy a /proc alól lehessen listázni!

 

 

Szólj hozzá!

Címkék: linux pcb kernel modul fájlleíró task struct

A bejegyzés trackback címe:

https://progpater.blog.hu/api/trackback/id/tr182672214

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása