Pseudos-terminaux linux

gégé -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, j'aurais quelques petites questions sur les pseudo-terminaux svp, observez ceci:

ls -l /dev/pts
total 0
crw--w---- 1 gege tty  136, 0 Feb 20 00:32 0
c--------- 1 root     root   5, 2 Feb 19 23:04 ptmx


Voici un petit programme en C:

int             main(void)
{
  int           fdm;

  system("ls -l /dev/pts");
  fdm = getpt();
  printf("file descriptor du maitre %d\n", fdm);
  system("ls -l /dev/pts");
  printf("le pseudo terminal esclave a pour nom %s\n", ptsname(fdm));
  return (0);
}


./a.out
total 0
crw--w---- 1 gege tty  136, 0 Feb 20 00:35 0
crw--w---- 1 gege tty  136, 1 Feb 20 00:35 1
c--------- 1 root     root   5, 2 Feb 19 23:04 ptmx
file descriptor du maitre 3
total 0
crw--w---- 1 gege tty  136, 0 Feb 20 00:35 0
crw--w---- 1 gege tty  136, 1 Feb 20 00:35 1
crw--w---- 1 gege tty  136, 2 Feb 20 00:35 2
c--------- 1 root     root   5, 2 Feb 19 23:04 ptmx
le pseudo terminal esclave a pour nom /dev/pts/2




Donc ici vous êtes d'accord que je viens de créer un pty (donc fichier mâitre + fichier esclave), première question: le fichier esclave c'est /dev/pts/2, mais le fichier maitre il est où?

Ensuite, on voit que le fichier esclave a déjà par défaut les droits 0620, d'où ma question: à quoi servent les fonctions grantpt ou unlockpt si tous les droits de l'esclave sont déjà aux bonnes valeurs?

Et finalement, j'aimerais écrire une fonction qui ouvre le pseudo terminal associé au file descriptor fdm, mais sans utiliser ptsname, peut on récupérer le chemin absolu d'un fichier en ayant son file descriptor? Si j'utilise un fstat pour avoir l'inode de fdm et ensuite une structure dirent sur dev/pts et que je compare les inodes rien ne correspond...si quelqu'un a une idée...?

Question subsidiaire: quelle est la syntaxe de la fonction open (en C) pour ouvrir un fichier avec les droits 654 par exemple, j'utilise les flags mais rien ne correspond jamais donc...

Merci.
A voir également:

2 réponses

Utilisateur anonyme
 
Salut

Pour répondre à ta question subsidiaire (la première, je n'en ai aucune idée), ouvrir un fichier en 654, si je ne me trompe pas, c'est permettre au propriétaire de le lire et de l'écrire, au groupe de le lire et de l'exécuter et aux autre de le lire.

Les flags sont donc :

S_IRUSR | S_IWUSR | S_IRGRP | S_IXGRP | S_IROTH


Regarde cette manpage qui explique chaque flags de fopen :
https://man7.org/linux/man-pages/man2/open.2.html
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Bien que tu programmes en C, tu n'es pas sur le bon forum.
D'ailleurs, je ne vois pas l'intérêt de s'embêter à mettre les commandes dans system() alors qu'un simple shell fait l'affaire.
Bref, j'oriente ta demande sur le forum Linux, t'auras plus de réponse.

Cdlt,
0