kernel Programmierung sys_creat

Dieses Thema im Forum "Programmieren allgemein" wurde erstellt von soundofakira, 15.05.2012.

  1. #1 soundofakira, 15.05.2012
    soundofakira

    soundofakira Grünschnabel

    Dabei seit:
    15.05.2012
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo zusammen

    Kurz zu meiner Person
    Mein Name ist Andre, ich bin 27 und bin eigentlich Aquarianer :)

    Ich arbeite mich grade ein wenig in die Kernel Programmierung ein und möchte ein wenig darüber lernen.

    Mein erstes Problem, welches ich probieren möchte ist:

    Ich möchte in die Kernel.log einen Eintrag schreiben lassen, wann immer eine neue Datei im System erstellt wird.

    Ich habe mich jetzt ein wenig durch die syscalls gewühlt und habe rausgefunden, dass sys_creat zur Erstellung einer neuen Datei genutzt wird.
    Sys_create ruft wiederum sys_open auf mit dem Flag O_Creat, wenn die Datei erstellt wird

    Richtig soweit?

    Jetzt stehe ich aber ein wenig vor dem Berg

    Ist diese Funktion in fs/open.c zu finden?

    Ich haber dort folgendes gefunden:

    Code:
    if (flags & O_CREAT) {
    		op->intent |= LOOKUP_CREATE;
    		if (flags & O_EXCL)
    			op->intent |= LOOKUP_EXCL;
    	}
    
    	if (flags & O_DIRECTORY)
    		lookup_flags |= LOOKUP_DIRECTORY;
    	if (!(flags & O_NOFOLLOW))
    		lookup_flags |= LOOKUP_FOLLOW;
    	return lookup_flags;
    }
    
    /**
     * filp_open - open file and return file pointer
     *
     * @filename:	path to open
     * @flags:	open flags as per the open(2) second argument
     * @mode:	mode for the new file if O_CREAT is set, else ignored
    Ich nehme mal an, dass ich also entsprechend unter
    Code:
    if (flags & O_CREAT) {
    		op->intent |= LOOKUP_CREATE;
    meinen Hinweis für den Kernel habe, dass es sich beim Aufruf der Funktion um eine neue Datei handelt die erstellt wird. (Flag O_Create)

    Wenn dem so ist.. wie geht es denn dann weiter?
    Da steige ich grade noch nicht so richtig hinter.

    Wäre super, wenn mir da jemand helfen kann :)

    gruß
    Andre
    gruß
    Andre
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 soundofakira, 17.05.2012
    soundofakira

    soundofakira Grünschnabel

    Dabei seit:
    15.05.2012
    Beiträge:
    5
    Zustimmungen:
    0
    So ich bin jetzt doch ein Stück weiter gekommen

    Die sys_open wird auf die

    do_sys_open Funktion gemapped (fs/open.c - Zeile 974)

    Code:
    long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
    {	
    
    	struct open_flags op;
    	int lookup = build_open_flags(flags, mode, &op);
    	char *tmp = getname(filename);
    	int fd = PTR_ERR(tmp);
    
    	if (!IS_ERR(tmp)) {
    		fd = get_unused_fd_flags(flags);
    		if (fd >= 0) {
    			struct file *f = do_filp_open(dfd, tmp, &op, lookup);
    			if (IS_ERR(f)) {
    				put_unused_fd(fd);
    				fd = PTR_ERR(f);
    			} else {
    				fsnotify_open(f);
    				fd_install(fd, f);
    			}
    		}
    		putname(tmp);
    	}
    	return fd;
    }
    Was ich jetzt machen müsste, wäre es die aktuelle Systemzeit abzugreifen und eine Ausgabe zu machen

    Dies habe ich so implementiert
    Code:
    long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
    {	
    //Abfragen der aktuellen Systemzeit
    	time_t zeit;
    	time(&zeit);
    	//Die Systemzeit wird in einem Chararray unbekannter Größe gespeichert
    	char[] zeitpunkt = asctime(localtime(&zeit));
    	
    	struct open_flags op;
    	int lookup = build_open_flags(flags, mode, &op);
    	char *tmp = getname(filename);
    	int fd = PTR_ERR(tmp);
    
    	if (!IS_ERR(tmp)) {
    		fd = get_unused_fd_flags(flags);
    		if (fd >= 0) {
    			struct file *f = do_filp_open(dfd, tmp, &op, lookup);
    			if (IS_ERR(f)) {
    				put_unused_fd(fd);
    				fd = PTR_ERR(f);
    			} else {
    				fsnotify_open(f);
    				fd_install(fd, f);
    				printk(KERN_INFO "Hier wurde eine neue Datei erstellt: %s %s",*tmp, zeitpunkt);
    			}
    		}
    		putname(tmp);
    	}
    	return fd;
    }
    Sollte so funktionieren oder?
     
Thema:

kernel Programmierung sys_creat

Die Seite wird geladen...

kernel Programmierung sys_creat - Ähnliche Themen

  1. Kernelprogrammierung: geöffnete Terminals modifizieren

    Kernelprogrammierung: geöffnete Terminals modifizieren: Guten Abend! Ich habe mal vor einigen Montaten das Kernelmodul 'vlogger' für den 2.6er-Kernel umgeschrieben...
  2. Neuer Kernel-Zweig nur für Sicherheitskorrekturen

    Neuer Kernel-Zweig nur für Sicherheitskorrekturen: Sasha Levin von Oracle hat angekündigt, von den stabilen Kernel-Versionen eigene Versionen pflegen zu wollen, die bis auf Sicherheitskorrekturen...
  3. Linux-Kernel 4.6 tritt in die Testphase ein

    Linux-Kernel 4.6 tritt in die Testphase ein: Linux-Initiator Linus Torvalds hat die Kernel-Version 4.6-rc1 als erste Testversion für Linux 4.6 freigegeben. Die Verbesserungen ziehen sich...
  4. MDB: Neuer Kernel-Debugger für Aufnahme vorgeschlagen

    MDB: Neuer Kernel-Debugger für Aufnahme vorgeschlagen: MDB, ein neuer Debugger, soll das Finden von Fehlern und das Debugging des Kernels vereinfachen. Ein Pull-Commit steht seit Anfang der Woche an....
  5. Syzkaller: Neuer Fuzz-Tester für den Kernel

    Syzkaller: Neuer Fuzz-Tester für den Kernel: Dmitry Vyukov und Google arbeiten seit einigen Monaten an Syzkaller, einem weiteren Fuzz-Tester für den Linux-Kernel. Syzkaller funktioniert etwas...