Bonjour, je vous écrit ici parsqu'après avoir posté sur fr.comp.lang.c
on m'a dit qu'il valait mieux posté mes questions sur le groupe consacré
au sytème utilisé (ici FreeBSD). Le but de ces question est de m'aider à
concevoir la partie interactive et l'historique d'un mini-shell... Les
voici donc :
1) Peut-on gérer les signaux de façon à ce que lorsqu'on tape ctrl-c
le(s) caractere(s) ^C ne s'affiche pas dans la console ?
2) Peut-on modifier le comportement du programme lorsque l'on tape
sur ctrl-d ? On m'a dit que ça n'envoyait pas un signal mais un eof
sur l'entree standard du processus... Donc je peux pas faire ça avec
signal ou sigaction ? Mais j'en ai absolument besoin ! ... :/
3) Y'a t'il un meilleur moyen que printf("\a") pour emettre un beep
systeme ?
4) Existe t'il une fonction qui renvoie le user home directory ?
5) J'ai plusieurs processus (les instances du mini-shell) qui
travaillent avec un segment de memoire partagé (pour l'historique des
commandes). Ils y ont tous acces en lecture / ecriture et dans
ce segment ils manipulent la copie d'un fichier. Attention il n'y a
pas de synchronisation entre la memoire et le disque, c'est le
premier processus a se lancer qui cree le segment et y copie le
fichier, puis le dernier a s'arreter qui se chargera de recopier le
contenu de la memoire dans le fichier, sans se soucier de savoir
s'il a ete modifie ou non. Le probleme c'est que je voudrais que
tous les processus puissent instantanement acceder aux deux
variables qui contiennent le nombre de caracteres et de lignes du
"fichier en memoire", ainsi qu'à l'offset du premier caractere de
chaque ligne... Je ne sais pas trop comment faire, utiliser une partie
du segment pour stocker une adresse vers un tableau... un autre segment
de memoire partage mais je ne pourrait alors pas changer sa taille...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jacques Caron
Salut,
On Thu, 30 Dec 2004 15:53:38 +0100, SoULiAne wrote:
1) Peut-on gérer les signaux de façon à ce que lorsqu'on tape ctrl-c le(s) caractere(s) ^C ne s'affiche pas dans la console ?
A ma connaissance c'est le shell qui l'affiche, donc si ton shell ne l'affiche pas...
2) Peut-on modifier le comportement du programme lorsque l'on tape sur ctrl-d ? On m'a dit que ça n'envoyait pas un signal mais un eof sur l'entree standard du processus... Donc je peux pas faire ça avec signal ou sigaction ? Mais j'en ai absolument besoin ! ... :/
cf man stty, man termios. Il suffit de changer le caractère affecté à EOF et éventuellement le mode du terminal.
4) Existe t'il une fonction qui renvoie le user home directory ?
Suivant le contexte, soit tu l'auras dans $HOME, soit il faudra récupérer cette info via getpwent (ou getpwnam ou getpwuid).
5) J'ai plusieurs processus (les instances du mini-shell) qui travaillent avec un segment de memoire partagé (pour l'historique des commandes). Ils y ont tous acces en lecture / ecriture
Ne pas oublier de mettre un moyen de synchro entre les instances (par exemple un sémaphore), sinon si un processus lit la shm pendant que l'autre la modifie, ça risque de ne pas être très beau...
Le probleme c'est que je voudrais que tous les processus puissent instantanement acceder aux deux variables qui contiennent le nombre de caracteres et de lignes du "fichier en memoire", ainsi qu'à l'offset du premier caractere de chaque ligne... Je ne sais pas trop comment faire, utiliser une partie du segment pour stocker une adresse vers un tableau... un autre segment de memoire partage mais je ne pourrait alors pas changer sa taille...
La ça n'a vraiment rien de spécifique à FreeBSD, c'est purement une question de programmation de base et de structuration de l'information en mémoire. Suivant que tu soies prêt à imposer des limites prédéfinies à certains paramètres (par exemple le nombre de lignes) ou pas, c'est plus ou moins simple...
Jacques. -- Interactive Media Factory Création, développement et hébergement de services interactifs: SMS, SMS+, Audiotel... http://www.imfeurope.com/
Salut,
On Thu, 30 Dec 2004 15:53:38 +0100, SoULiAne <cubixATc@ramail.com> wrote:
1) Peut-on gérer les signaux de façon à ce que lorsqu'on tape ctrl-c
le(s) caractere(s) ^C ne s'affiche pas dans la console ?
A ma connaissance c'est le shell qui l'affiche, donc si ton shell ne
l'affiche pas...
2) Peut-on modifier le comportement du programme lorsque l'on tape
sur ctrl-d ? On m'a dit que ça n'envoyait pas un signal mais un eof
sur l'entree standard du processus... Donc je peux pas faire ça avec
signal ou sigaction ? Mais j'en ai absolument besoin ! ... :/
cf man stty, man termios. Il suffit de changer le caractère affecté à EOF
et éventuellement le mode du terminal.
4) Existe t'il une fonction qui renvoie le user home directory ?
Suivant le contexte, soit tu l'auras dans $HOME, soit il faudra récupérer
cette info via getpwent (ou getpwnam ou getpwuid).
5) J'ai plusieurs processus (les instances du mini-shell) qui
travaillent avec un segment de memoire partagé (pour l'historique des
commandes). Ils y ont tous acces en lecture / ecriture
Ne pas oublier de mettre un moyen de synchro entre les instances (par
exemple un sémaphore), sinon si un processus lit la shm pendant que
l'autre la modifie, ça risque de ne pas être très beau...
Le probleme c'est que je voudrais que
tous les processus puissent instantanement acceder aux deux
variables qui contiennent le nombre de caracteres et de lignes du
"fichier en memoire", ainsi qu'à l'offset du premier caractere de
chaque ligne... Je ne sais pas trop comment faire, utiliser une partie
du segment pour stocker une adresse vers un tableau... un autre segment
de memoire partage mais je ne pourrait alors pas changer sa taille...
La ça n'a vraiment rien de spécifique à FreeBSD, c'est purement une
question de programmation de base et de structuration de l'information en
mémoire. Suivant que tu soies prêt à imposer des limites prédéfinies à
certains paramètres (par exemple le nombre de lignes) ou pas, c'est plus
ou moins simple...
Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/
On Thu, 30 Dec 2004 15:53:38 +0100, SoULiAne wrote:
1) Peut-on gérer les signaux de façon à ce que lorsqu'on tape ctrl-c le(s) caractere(s) ^C ne s'affiche pas dans la console ?
A ma connaissance c'est le shell qui l'affiche, donc si ton shell ne l'affiche pas...
2) Peut-on modifier le comportement du programme lorsque l'on tape sur ctrl-d ? On m'a dit que ça n'envoyait pas un signal mais un eof sur l'entree standard du processus... Donc je peux pas faire ça avec signal ou sigaction ? Mais j'en ai absolument besoin ! ... :/
cf man stty, man termios. Il suffit de changer le caractère affecté à EOF et éventuellement le mode du terminal.
4) Existe t'il une fonction qui renvoie le user home directory ?
Suivant le contexte, soit tu l'auras dans $HOME, soit il faudra récupérer cette info via getpwent (ou getpwnam ou getpwuid).
5) J'ai plusieurs processus (les instances du mini-shell) qui travaillent avec un segment de memoire partagé (pour l'historique des commandes). Ils y ont tous acces en lecture / ecriture
Ne pas oublier de mettre un moyen de synchro entre les instances (par exemple un sémaphore), sinon si un processus lit la shm pendant que l'autre la modifie, ça risque de ne pas être très beau...
Le probleme c'est que je voudrais que tous les processus puissent instantanement acceder aux deux variables qui contiennent le nombre de caracteres et de lignes du "fichier en memoire", ainsi qu'à l'offset du premier caractere de chaque ligne... Je ne sais pas trop comment faire, utiliser une partie du segment pour stocker une adresse vers un tableau... un autre segment de memoire partage mais je ne pourrait alors pas changer sa taille...
La ça n'a vraiment rien de spécifique à FreeBSD, c'est purement une question de programmation de base et de structuration de l'information en mémoire. Suivant que tu soies prêt à imposer des limites prédéfinies à certains paramètres (par exemple le nombre de lignes) ou pas, c'est plus ou moins simple...
Jacques. -- Interactive Media Factory Création, développement et hébergement de services interactifs: SMS, SMS+, Audiotel... http://www.imfeurope.com/
DINH Viêt Hoà
1) Peut-on gérer les signaux de façon à ce que lorsqu'on tape ctrl-c le(s) caractere(s) ^C ne s'affiche pas dans la console ?
2) Peut-on modifier le comportement du programme lorsque l'on tape sur ctrl-d ? On m'a dit que ça n'envoyait pas un signal mais un eof sur l'entree standard du processus... Donc je peux pas faire ça avec signal ou sigaction ? Mais j'en ai absolument besoin ! ... :/
3) Y'a t'il un meilleur moyen que printf("a") pour emettre un beep systeme ?
ncurses répond aux 3 questions.
1 et 2) getch(), il faut regarder les exemples qui désactivent l'écho. 3) beep().
-- DINH V. Hoa,
"emacs, c'est génial" -- Arsunique
1) Peut-on gérer les signaux de façon à ce que lorsqu'on tape ctrl-c
le(s) caractere(s) ^C ne s'affiche pas dans la console ?
2) Peut-on modifier le comportement du programme lorsque l'on tape
sur ctrl-d ? On m'a dit que ça n'envoyait pas un signal mais un eof
sur l'entree standard du processus... Donc je peux pas faire ça avec
signal ou sigaction ? Mais j'en ai absolument besoin ! ... :/
3) Y'a t'il un meilleur moyen que printf("a") pour emettre un beep
systeme ?
ncurses répond aux 3 questions.
1 et 2) getch(), il faut regarder les exemples qui désactivent l'écho.
3) beep().
1) Peut-on gérer les signaux de façon à ce que lorsqu'on tape ctrl-c le(s) caractere(s) ^C ne s'affiche pas dans la console ?
2) Peut-on modifier le comportement du programme lorsque l'on tape sur ctrl-d ? On m'a dit que ça n'envoyait pas un signal mais un eof sur l'entree standard du processus... Donc je peux pas faire ça avec signal ou sigaction ? Mais j'en ai absolument besoin ! ... :/
3) Y'a t'il un meilleur moyen que printf("a") pour emettre un beep systeme ?
ncurses répond aux 3 questions.
1 et 2) getch(), il faut regarder les exemples qui désactivent l'écho. 3) beep().