CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[linux] pipe et descripteur de fichier

dnob700
dnob700
Niveau 10
29 mai 2008 à 22:50:25

Bonjour,

Une petite question de système.
Si j'ai un programme a.out que je lance comme ça :
foo | a.out
où foo est un programme quelconque.

Y a-t-il un moyen de vérifier si a.out est bien à la sortie d'un pipe ? et en supposant que je sache que a.out est bien branché à la sortie d'un pipe, y a-t-il quand même un moyen d'obtenir des données depuis la console. Où est ce que du fait que foo lit potentiellement la console, ça interdit complètement à a.out de le faire ?

godrik
godrik
Niveau 30
30 mai 2008 à 00:19:16

tu veux dire savoir si ton entré standard est un pipe, ou un fichier ou un tty ?
basiquement, tu ne peux pas le savoir.
et je pense qu'avec un pipe les choses vont etre compliqué parceque le shell a fermer l'access au terminal et je pense pas que tu puisse réouvrir l'access au tty (seul root doit avoir le droit de faire ca. C'est une des raisons pour lesquels xterm est suid root)

cependant, tu peux le faire autrement facilement si foo n'utilise pas l'entré standard. Un tube nommé pour ferait l'affaire. Un exemple :

mkfifo /tmp/tata
grep zogzog unfichier > /tmp/tata &
diff /tmp/tata - < unfichier

Si ton programme lit l'entré standard. alors il faut peut etre gérer les descripteurs de fichier a la main, en faisant comme dans un shell sauf que l'on ne ferme pas l'entré standard du processus qui deviendra a.out et on redirige la sortie du pipe de foo sur un descripteur de fichier qui n'est pas 0. Il faut alors passé en parametre au programme a.out le descripteur de fichier sur lequel il doit lire.

Note que je ne sais pas comment se passent les access en lecture au terminal dans ce cas. Les read sont généralement bloquant. j'imagine donc que la politique est FIFO.

Si tu as besoin d'un bout de code, je peux te fournir ca facilement.

dnob700
dnob700
Niveau 10
30 mai 2008 à 00:55:25

merci de la réponse et désolé aux autres, je me suis trompé de forum en postant (je pensais être sur programmation).

En y repensant, je vois surtout que ce que je voulais faire n'a pas trop de sens, car si foo lis l'entrée standard (celle de la console) essayer d'y accéder avec a.out va donner un comportement auquel l'utilisateur ne s'attendra pas du tout.

godrik
godrik
Niveau 30
30 mai 2008 à 10:33:22

probablement,
cependant il y a des programmes qui font plusieurs lectures simultanée sur le meme pipe. Ca sert a faire un genre de producteur/consommateur en utilisant le pipe unix comme buffer.
Les I/O sont bufferées sur le retour chariot il me semle, du coup tu es sur de lire les lignes de facon atomique.
Enfin, c'est sur que ca va faire quelquechose de bizarre pour ce que tu veux faire.

Sous forums
  • Astronomie
La vidéo du moment