[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.