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