[Powered by Google Translate] TOMMY: Dans cette vidéo, nous allons en apprendre davantage sur
réorienter et de tuyaux.
Jusqu'à présent, nous avons utilisé des fonctions comme printf pour
sortie de données vers le terminal et fonctionne comme GetString
pour permettre à l'utilisateur d'apporter une contribution à notre
programme à l'aide du clavier.
Jetons rapidement un coup d'oeil à un programme qui obtient une ligne de
entrée de l'utilisateur, puis il sort.
>> Sur la ligne 7, nous invitant l'utilisateur à une chaîne, et
puis sur la ligne 8, nous l'imprimer arrière.
Nous allons compiler et exécuter notre programme.
Grande.
La chaîne nous avons fourni a été renvoyée en écho
nous à la borne.
Cela s'est produit parce que la fonction printf écrit à un
ruisseau appelé la sortie standard, ou s-t-d-out.
Quand quelque chose est écrit sur la sortie standard, il est par défaut
affichée par le terminal.
>> Donc, c'est bien beau, mais si, au lieu de simplement
affichage de la chaîne, nous avons voulu l'enregistrer dans un fichier?
Par exemple, nous pourrions vouloir me souviens pas exactement ce que notre
programme a fait quand nous lui avons donné une entrée particulière tard.
Une approche possible serait de le faire dans notre programme en C, à l'aide
certaines fonctions spéciales pour l'écriture des fichiers que nous allons
voir dans une autre vidéo.
Encore plus facile, cependant, serait en quelque sorte
rediriger stdout vers un fichier.
Ainsi, lorsque printf écrit sur la sortie standard, le contenu sera
être écrites dans un fichier plutôt que
affichée par le terminal.
Nous pouvons faire cela en ajoutant un signe supérieur à, suivi
par un nom de fichier, la commande que nous utilisons pour exécuter notre programme.
>> Donc, plutôt que de simplement exécuter. / Redirection, nous pouvons
exécuter. / redirection, suivi d'un signe supérieur, suivie par
nom de fichier, comme fichier.txt.
Voyons voir ce qui se passe.
OK.
Remarquez que cette fois, rien n'est affiché sur le terminal,
mais nous n'avons pas modifié le contenu de notre
Programme C du tout.
Examinons maintenant le contenu de ce répertoire avec ls.
>> Très bien.
Nous avons maintenant un nouveau fichier dans notre répertoire appelé file.txt,
qui est le nom du fichier, nous avons fourni quand nous avons eu notre
Rediriger programme.
Ouvrons fichier.txt.
Et ici, nous pouvons voir que la sortie standard de redirection était
écrit dans le fichier appelé fichier.txt.
Donc, nous allons exécuter la commande précédente à nouveau, mais fournir un
d'entrée différent cette fois.
D'accord.
Jetons un coup d'oeil à file.txt maintenant.
>> Nous pouvons voir ici que le fichier a été écrasé, donc notre
d'entrée d'origine n'est plus là.
Si nous voulons au lieu de joindre à ce dossier, mettre le nouveau
entrée ci-dessous le contenu existant du fichier, nous pouvons
utiliser deux signes supérieur au lieu d'un seul.
Essayons.
Maintenant, si nous ouvrons à nouveau fichier.txt, on peut voir à la fois de notre
des lignes d'entrée.
Dans certains cas, on peut vouloir jeter tout
sortie de notre programme.
Plutôt que d'écrire la sortie dans un fichier, puis supprimer
le fichier quand nous aurons fini avec elle, nous pouvons écrire une tâche particulière
fichier appelé / dev / null.
Quand quelque chose est écrit dans / dev/null--
ou tout simplement pour faire court devnull -
il est automatiquement éliminé.
Alors, pensez à devnull comme un trou noir pour vos données.
>> Alors maintenant, nous avons vu comment le signe supérieur peut rediriger
stdout, nous allons voir comment nous pouvons rediriger standard -
ou s-t-d-dans -
l'analogue de stdout.
Alors que les fonctions comme printf écrire dans le flux appelé
stdout, GetString et des fonctions similaires lue dans le flux
appelé stdin, qui, par défaut, est le flux de
caractères tapés au clavier.
Nous pouvons rediriger stdin en utilisant le signe inférieur, suivie
par un nom de fichier.
Maintenant, plutôt que de demander à l'utilisateur pour l'entrée à l'
terminal, un programme pour ouvrir le fichier que nous avons spécifié et l'utilisation
les lignes en entrée.
>> Voyons voir ce qui se passe.
Grande.
La première ligne de file.txt a été imprimée à la borne
parce que nous faisons appel GetString fois.
Si nous avions un autre appel à GetString dans notre programme, le
prochaine ligne de file.txt aurait été utilisé comme
d'entrée pour cet appel.
Encore une fois, nous n'avons pas modifié notre programme C du tout.
Nous ne faisons que changer la façon dont nous l'exécutons.
Et souvenez vous aussi, nous n'avons pas redirigé stdout cette fois,
de sorte que la sortie du programme a été encore
affichées sur le terminal.
Nous pouvons, bien sûr, rediriger à la fois stdin
et stdout comme ça.
Maintenant, file2.txt contient la première ligne de file.txt.
>> Ainsi, en utilisant ces opérateurs, nous avons été en mesure de lire et d'
écrire à partir de fichiers texte.
Maintenant, nous allons voir comment nous pouvons utiliser la sortie d'un programme
l'entrée d'un autre programme.
Alors, voici un autre programme simple C I
ont appelé ici hello.c.
Comme vous pouvez le voir, cette affiche simplement "Salut
il "à l'utilisateur.
Si je veux rediriger à utiliser comme entrée la sortie de bonjour -
un autre programme -
Je pourrait tout d'abord rediriger stdout bonjour à un fichier appelé
input.txt, puis rediriger le stdin d'rediriger vers ce même
fichier - input.txt.
Donc je peux faire. / Bonjour> input.txt.
Appuyez sur Entrée pour exécuter cette.
Suivie d'. / Redirect <
input.txt, et d'exécuter cela.
Donc, nous pouvons raccourcir un peu ceci avec un point-virgule, ce qui permet
nous d'exécuter deux ou plusieurs commandes sur la même ligne.
Donc je peux dire,. / Bonjour> input.txt, point-virgule,
. / Redirect input.txt <.
>> Donc, cela fonctionne, mais il se sent encore assez inélégant.
Je veux dire, nous avons vraiment besoin de ce fichier texte intermédiaire qui est
n'est plus nécessaire après redirection fonctionne?
Heureusement, nous pouvons éviter ce fichier texte en utilisant ce qui est
appelée pipe.
Si je dis: / bonjour |.. / Rediriger, puis la sortie standard d'
le programme sur la gauche -
dans ce cas, bonjour -
sera utilisée comme entrée pour la norme
programme sur la droite.
Dans ce cas, rediriger. Donc, nous allons lancer ça.
>> Nous y voilà.
Nous pouvons voir que la sortie de bonjour a été utilisé comme entrée
pour rediriger.
En enfilant commandes de concert avec les tuyaux, nous formons ce qui est
appelé pipe-line, depuis notre sortie est essentiellement le déplacement
à travers une séquence de commandes.
Utilisant des tuyaux, on peut faire des trucs cool sans avoir besoin de
écrire de code du tout.
Par exemple, disons que nous voulons savoir combien de fichiers sont
l'intérieur de ce répertoire.
L'utilisation d'un tuyau, on peut combiner la commande ls avec le wc -
ou wordcount -
de commande.
Ls affichera tous les fichiers dans le répertoire de sortie standard, et
wc nous dira combien de lignes ont été donnés à lui via stdin.
Donc, si nous disons ls | wc-l -
fournissant l'option-l pour wc pour lui dire de compter les lignes -
nous pouvons voir exactement combien de fichiers sont
dans le répertoire courant.
>> Donc, nous allons jeter un coup d'oeil à un exemple de plus.
J'ai ici un fichier appelé students.txt,
avec une liste de noms.
Toutefois, ces noms ne sont pas dans n'importe quel ordre tout cela, et il semble
comme quelques noms sont répétés.
Ce que nous voulons est une liste de noms uniques dans l'ordre alphabétique
commande, enregistrée dans un fichier appelé final.txt.
Nous pourrions, bien sûr, écrire un programme en C pour faire cela pour nous.
Mais il va devenir inutilement
complexe assez rapidement.
Disons plutôt que d'utiliser des tuyaux et des built-in-outils pour résoudre
ce problème.
>> La première chose que nous devons faire est de lire le fichier students.txt.
La commande cat va faire exactement cela.
Il sera lu dans le fichier spécifié et écrire
son contenu vers stdout.
Après que nous avons lu le fichier texte, nous allons
Pour trier les noms.
La commande sort peut gérer cela pour nous.
Trier va afficher la ligne alimenté par stdin vers stdout
dans l'ordre.
Afin de fournir le contenu de students.txt à
stdin sorte, nous pourrions utiliser un tuyau de combiner chat et de tri.
Donc, je peux exécuter chat students.txt | trier et
appuyez sur Entrée.
Et maintenant, nous voyons le contenu de students.txt dans
ordre alphabétique.
>> Donc, nous allons ajouter une autre commande -
uniq, ou unique -
à notre portefeuille.
Comme vous pouvez le deviner, uniq, lorsqu'il est fourni une séquence ordonnée d'
lignes via stdin, va afficher les lignes uniques.
Nous avons donc maintenant students.txt chat
| Sort | uniq.
Enfin, on peut enregistrer la sortie de la canalisation à une
fichier via chat students.txt | sort | uniq
> Final.txt.
Donc, si nous ouvrons final.txt, nous avons exactement ce que nous étions
à la recherche de:
une liste de noms uniques dans l'ordre alphabétique,
enregistrées dans un fichier texte.
Par ailleurs, nous avons également pu dire sort <
students.txt | uniq> final.txt de faire exactement
la même chose, en utilisant chacun des opérateurs que nous avons vu dans
cette vidéo.
>> Mon nom est Tommy, et c'est CS50.