[Powered by Google Translate] TOMMY: En este video, vamos a aprender acerca de reorientar y tuberías. Hasta ahora, hemos estado utilizando funciones como printf para los datos de salida de la terminal y funciona como GetString para permitir al usuario para proporcionar entrada a nuestro programa mediante el teclado. Vamos a echar un vistazo rápido a un programa que tiene una línea de la entrada del usuario y luego da salida. En la línea 7, estamos indicando al usuario para una cadena, y a continuación, en la línea 8, lo estamos imprimiendo a salir. Vamos a compilar y ejecutar nuestro programa. Grande. La cadena que siempre se hizo eco de nuevo a nosotros en la terminal. Esto sucedió porque la función printf escribió a un corriente llamada de salida estándar, o s-t-d fuera. Cuando algo se escribe en stdout, es por defecto mostrado por el terminal. Así que eso es todo muy bien, pero ¿qué pasaría si, en lugar de simplemente mostrar la cadena, queríamos que lo guarde en un archivo? Por ejemplo, podríamos querer recordar exactamente lo que nuestro programa hizo cuando le dimos una entrada particular después. Un enfoque sería hacer esto en nuestro programa en C, utilizando algunas funciones especiales para escribir en los archivos que vamos a ver en otro video. Aún más fácil, sin embargo, sería de alguna manera redirigir stdout a un archivo. De esta manera, cuando escribe a la salida estándar printf, el contenido se se escriba en un archivo en lugar de mostrado por el terminal. Podemos hacer justamente eso mediante la adición de un signo de mayor que, seguido por un nombre de archivo, el comando que usamos para ejecutar nuestro programa. Así, en lugar de limitarse a ejecutar. / Redirect, podemos ejecutar. / redirigir, seguido por un signo de mayor que, seguido por nombre de archivo, como archivo.txt. Vamos a ver qué pasa. Aceptar. Tenga en cuenta que esta vez, nada se muestra en la parte terminal, pero no hemos modificado los contenidos de nuestra C Programa de ninguna forma. Ahora vamos a examinar el contenido de este directorio con ls. Está bien. Ahora tenemos un nuevo archivo en nuestro directorio denominado archivo.txt, que es el nombre del archivo que suministra cuando nos encontramos con nuestro Redirigir programa. Vamos a abrir archivo.txt. Y aquí, podemos ver que la salida estándar de redirección era escribe en el archivo denominado archivo.txt. Así que vamos a ejecutar el comando anterior de nuevo, pero el suministro de una entrada diferente esta vez. Bien. Vamos a echar un vistazo a archivo.txt ahora. Podemos ver aquí que el archivo ha sido sobrescrito, por lo que nuestro entrada original ya no está ahí. Si en cambio desea añadir a este archivo, poner el nuevo de entrada por debajo del contenido existente del archivo, podemos utilizar dos signos mayor que en vez de uno solo. Vamos a intentar eso. Ahora bien, si abrimos archivo.txt vez más, podemos ver tanto de nuestro líneas de entrada. En algunos casos, lo que se quiere descartar cualquier salida de nuestro programa. En lugar de escribir la salida a un archivo y luego borrar el archivo cuando haya terminado con él, podemos escribir una especial para archivo llamado / dev / null. Cuando algo se escribe en / dev/null-- o simplemente para abreviar devnull - se descartan automáticamente. Así que piensa en devnull como un agujero negro para sus datos. Así que ahora que hemos visto cómo el signo mayor que puede redirigir stdout, vamos a ver cómo podemos redirigir estándar - o s-t-d-en - el análogo de stdout. Mientras que las funciones como printf escribir en la secuencia llamada stdout, GetString y funciones similares lee en la secuencia llamado stdin, que, por defecto, es la corriente de caracteres que se escriba en el teclado. Podemos redirigir stdin utilizando el signo menor que, seguido por un nombre de archivo. Ahora, en lugar de solicitar al usuario la entrada en la terminal, el programa se abrirá el archivo que especificamos y utilizar sus líneas como entrada. Vamos a ver qué pasa. Grande. La primera línea de archivo.txt ha sido impresa al terminal porque estamos llamando GetString vez. Si tuviéramos otra llamada a GetString en nuestro programa, el siguiente línea de archivo.txt se han utilizado como entrada a esa llamada. Una vez más, no hemos modificado nuestro programa en C en absoluto. Sólo estamos cambiando la forma en que se ejecuta. Y también recuerdo, no hemos redireccionado stdout este tiempo, por lo que la salida del programa era todavía muestran en el terminal. Podemos, por supuesto, redirigir stdin y stdout como este. Ahora, file2.txt contiene la primera línea de archivo.txt. Por lo tanto, el uso de estos operadores, hemos sido capaces de leer y escribir a partir de archivos de texto. Ahora, vamos a ver cómo podemos usar la salida de un programa como la entrada de otro programa. Así que aquí está otro sencillo programa en C que aquí he llamado hello.c. Como puede ver, esto simplemente da salida "Hola allí! "para el usuario. Si quiero redirigir a utilizar como entrada la salida de hello - otro programa - La primera vez que podría redirigir la salida estándar de saludar a un archivo llamado input.txt, a continuación, redirigir la entrada estándar de redirigir a la misma archivo - input.txt. Así que puedo hacer. / Hello> input.txt. Pulse Intro para ejecutar este. Seguido por. / Redirect < input.txt y ejecutar eso. Así que podemos acortar esto un poco con un punto y coma, que permite nos para ejecutar dos o más comandos en la misma línea. Así que puedo decir,. / Hola> input.txt, punto y coma, . / Redirect input.txt <. Así funciona esto, pero todavía se siente bastante poco elegante. Quiero decir, ¿realmente necesitamos este archivo de texto que es intermediario ya no es necesario después de redirigir carreras? Por suerte, podemos evitar este archivo de texto adicional usando lo que es llama un tubo. Si yo digo, / hola |.. / Redirección, entonces la salida estándar de el programa de la izquierda - en este caso, hello - se utiliza como la entrada estándar para la programa a la derecha. En este caso, redirigir. Así que vamos a ejecutar este. Ahí vamos. Podemos ver que la salida de hola se utiliza como la entrada para redirigir. Al encadenar comandos junto con tubos, formamos lo que es llamado una tubería, ya que nuestra producción es esencialmente movimiento a través de una secuencia de comandos. Utilizando tubos, podemos hacer algunas cosas interesantes sin necesidad de escribir ningún código. Por ejemplo, digamos que queremos saber cuántos archivos dentro de este directorio. El uso de un tubo, podemos combinar el comando ls con el wc - o recuento de palabras - comando. Ls dará salida a cada archivo en el directorio a stdout, y wc nos dirá cuántas líneas se les dio a ella a través de stdin. Por lo tanto, si decimos ls | wc-l - suministrar la opción-l para wc para indicarle que debe contar con líneas - podemos ver exactamente cuántos archivos en el directorio actual. Así que echemos un vistazo a un ejemplo más. Tengo aquí un archivo llamado students.txt, con una lista de nombres. Sin embargo, estos nombres no están en ningún orden todo, y parece que como algunos nombres se repiten. Lo que queremos es una lista de nombres únicos en orden alfabético orden, guardar en un archivo llamado final.txt. Podríamos, por supuesto, escribir un programa en C para hacer esto por nosotros. Pero va a llegar innecesariamente complejo con bastante rapidez. Vamos a utilizar en su lugar tubos y algunas herramientas integradas para resolver- este problema. Lo primero que tenemos que hacer es leer el students.txt archivo. El comando cat va a hacer precisamente eso. Se leerá en el archivo especificado y escribir su contenido a stdout. Después de que haya leído el archivo de texto, vamos a desea ordenar los nombres. El comando sort puede manejar esto por nosotros. Ordenar dará salida a la línea de suministro a través de la entrada estándar a la salida estándar de forma ordenada. Con el fin de suministrar el contenido de students.txt a stdin tipo, podríamos usar un tubo para combinar gato y ordenar. Así que puedo ejecutar gato students.txt | ordenar y pulse Intro. Y ahora, podemos ver el contenido de students.txt en orden alfabético. Así que vamos a añadir otro comando - uniq, o único - a nuestra cartera. Como se puede adivinar, uniq, cuando se suministra una secuencia ordenada de líneas a través de la entrada estándar, es la salida de las líneas únicas. Así que ahora tenemos students.txt gato | Sort | uniq. Por último, podemos guardar la salida de la tubería a una archivo a través de gato students.txt | sort | uniq > Final.txt. Así pues, si nos abrimos final.txt, tenemos exactamente lo que estábamos buscando: una lista de nombres únicos en orden alfabético, guardar en un archivo de texto. Por cierto, también podría haber dicho sort < students.txt | uniq> final.txt hacer exactamente lo mismo, utilizando cada uno de los operadores que hemos visto en este vídeo. Mi nombre es Tommy, y esto es CS50.