Untitled
unknown
plain_text
6 months ago
2.0 kB
3
Indexable
Ajout d’un nouvel appel système Il est possible d’étendre les fonctionnalités de ce noyau en ajoutant de nouvelles commandes en tant que appels système. On va développer une commande qui nous donne l’heure du système. Voici les dif- férentes étapes. Etape 1. Avant de pouvoir accèder à l’heure du système, il faut définir un appel système. La ver- sion initiale de XV6, il existe 21 appels système (fichier syscall.h). Etape 1.1 Ajouter la définition dans syscall.h 4 # define SYS_date 22 Etape 1.2 Ajouter la déclaration de la fonction sys_date et le lien (pointeur de fonction) dans la table syscalls dans syscall.c) extern int sys_date ( void ); et [ SYS_date ] sys_date , Etape 1.3 Ajouter la fonction sys_date dans le fichier sysproc.c. Cette fonction récupère l’adresse de la structure de données qui permet de stocker la date. Cette date est accessible via la fonction cmostime() du fichier lapic.c. int sys_date ( void ) { struct rtcdate * r ; if ( argptr (0 , ( void *)& r , sizeof ( r )) < 0) return -1; cmostime ( r ); return 0; } Etape 1.4 Déclarer le lien entre la fonction sys_date et le nom que l’on pourra utiliser dans le code de programme client. Il faut ajouter la ligne suivante à la fin du fichier usys.S. SYSCALL ( date ) Etape 1.5 Pour finir, il faut déclarer l’entête de la fonction date dans le fichier user.h. int date ( struct rtcdate *); Etape 2. Définir un nouveau fichier date.c dans le répertoire source de XV6 avec le code C suivant : # include " types . h " # include " user . h " # include " date . h " int main ( int argc , char * argv []) { struct rtcdate r ; if ( date (& r ) == -1) { printf (2 , " date failed \ n " ); exit (); } // code d ’ affichage de la date 5 exit (); } Etape 2. Ajouter dans le fichier date.c le code pour l’affichage de la date et l’heure courante. Remarque : — la fonction void printf(int fd, const char *fmt, ...) est disponible — il faut ajouter le header type.h au fichier date.h : #include "types.h"
Editor is loading...
Leave a Comment