Implementación de ls | comando wc

ls | Comando wc: Usando ls|wc, podemos contar nuevas líneas, palabras y letras de todos los archivos del directorio actual. Podemos ver de lo siguiente después de la ejecución del código que obtenemos los mismos resultados.

Requisitos previos: comando ls | comando wc | tubería en linux

Enfoque: primero, tenemos que usar tuberías para la comunicación entre procesos en una array donde se usa a[0] para leer y a[1] para escribir. Podemos replicar el proceso usando fork. En el proceso principal, la salida estándar se cierra para que la salida del comando ls vaya a a[0] y, de manera similar, la entrada estándar se cierra en el proceso secundario. Ahora, si ejecutamos el programa, la salida será la misma que el comando de linux ls|wc.

A continuación se muestra la implementación del enfoque anterior:

// C code to implement ls | wc command
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include<errno.h>
#include<sys/wait.h>
#include <unistd.h>
int main(){
  
    // array of 2 size a[0] is for
    // reading and a[1] is for
    // writing over a pipe    
    int a[2];
  
    // using pipe for inter
    // process communication
    pipe(a);
  
    if(!fork())
    {
        // closing normal stdout
        close(1);
          
        // making stdout same as a[1]
        dup(a[1]);
          
        // closing reading part of pipe
        // we don't need of it at this time
        close(a[0]);
          
        // executing ls 
        execlp("ls","ls",NULL);
    }
    else
    {
        // closing normal stdin
        close(0);
          
        // making stdin same as a[0]
        dup(a[0]);
          
        // closing writing part in parent,
        // we don't need of it at this time
        close(a[1]);
          
        // executing wc
        execlp("wc","wc",NULL);
    }
}

Publicación traducida automáticamente

Artículo escrito por bhonesh chawla y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *