Llamada del sistema Popen Linux en C

Llamada del sistema Popen Linux en C

"La función popen () llevará a cabo el comando dado por el comando de la cadena. La función debe devolver un puntero a una transmisión que se usa para leer o escribir en la tubería mientras también crea una tubería entre la aplicación de llamada y el comando ejecutado. La función popen está disponible en la biblioteca estándar de la función de E/S y genera un segundo proceso para ejecutar un comando terminal. La fase abierta del popen () es la misma que la fase abierta en la función Fopen (). La función popen () inicia un proceso bifurcando, construyendo una tubería y ejecutando el shell. Dado que una tubería es unidireccional por defecto; Como resultado, la transmisión es de solo lectura o solo por escrito. En la ejecución exitosa de la función popen (), se obtiene un flujo abierto que se utiliza para que la tubería lea y escriba."

Ejemplo 1

Con el siguiente programa de ejemplo, leeremos los archivos que existen en el directorio o carpeta actual utilizando la llamada del sistema Popen. En primer lugar, hemos ingresado el stdio.h Archivo de encabezado de la biblioteca estándar C. Luego, tenemos una función de programa int main () donde hemos implementado la función popen. Antes de esto, establecimos la variable de puntero "FileOpen" de la clase "Archivo". La variable de puntero del archivo indica el byte siguiente para leer o escribir.

Después de eso, asignamos el valor límite del personaje para ser leído. La variable "fileopen" luego invocó la función "popen". La función "Popen" toma el comando "LS -L" de Linux, que enumerará todos los archivos del directorio actual. Además, hemos ingresado el parámetro "r" en la función popen, que indica el modo de lectura.

Aquí, hemos recibido el proceso de lectura de archivos utilizando la función popen. A continuación, procesamos la tubería creada con el bucle While. El bucle While usa los métodos FGETS, que toman los argumentos "línea", "size de la línea" y "fileopen". Los FGets leen el proceso de tuberías y lo almacenaron en el símbolo "%s" de la cadena. Este símbolo particular se llama dentro del método printf junto con el argumento de "línea". Una vez que hemos creado la tubería procesada, con la función PLACED, el proceso de tuberías se puede cerrar como se implementa al final del programa a continuación.

#incluir
int main ()

Archivo *fileopen;
línea char [130];
Fileopen = popen ("ls -l", "r");
while (fgets (línea, sizeOf line, fileopen))

printf ("%s", línea);

pclose (fileopen);

La función popen del programa C bifurcó el proceso anterior y luego creó la tubería. Ahora, hemos ejecutado la tubería procesada de la corriente en el shell con el comando de compilación C. La salida ha enumerado todos los archivos en el directorio "Inicio", ya que hemos ejecutado el programa en ese directorio.

Ejemplo 2

En el programa Popen anterior, tenemos una simple demostración de la funcionalidad del programa Popen que se utiliza para ver el proceso de transmisión de los archivos de lectura. Ahora, hemos tomado otro ejemplo de la función popen donde hemos recibido el proceso con el modo de escritura. Consideremos el programa con la función principal. Hemos construido la variable del puntero del archivo dentro de la función principal como "archivo". El puntero del archivo se implementa con la función popen.

La función popen toma el comando "gato" y el "w" para el modo de escritura. Aquí, cada argumento del archivo se lee y se envía secuencialmente a la salida estándar por el comando CAT. En el cuerpo de bucle for, hemos utilizado la función fprintf para imprimir los valores de conteo numérico, ya que hemos especificado el símbolo "%d". Luego cerrado, el proceso de tubería popen con la llamada del sistema PCLOSE.

#incluir
int main (int argc, char ** argv)
Archivo *file = popen ("cat", "w");
int x = 0;
para (x = 0; x<5;x++)
fprintf (archivo, "my count = %d \ n", x);

pclose (archivo);
regresar 0;

Cuando ejecutamos el proceso creado anteriormente, imprimió los valores de conteo de la siguiente manera.

Ejemplo 3

Ahora, tenemos otro programa que transfiere los datos de un proceso a otro proceso. Haremos esto con la tubería de la función popen. Hemos implementado el programa utilizando las bibliotecas estándar de C. Luego, tenemos una función principal int para implementar un programa. Aquí, hemos especificado la cadena en la función SPRINTF con el argumento "Buffer". La función sprintf () mantiene el resultado en el búfer de char proporcionado por Sprintf en lugar de enviarlo a la solicitud.

Después de eso, llamamos a la función popen dentro de la variable "Leer". Allí, tenemos dos procesos dentro de la función popen. El "WC -C" es el primer proceso que se utiliza para contar los caracteres proporcionados, y el segundo proceso es la "W", que indica que la tubería está abierta en modo de escritura. Después de eso, tenemos la función "fwrite" que usa la tubería para escribir datos. Los datos serán recibidos por el "WC", luego contarán el carácter y se mostrarán en el shell.

#incluir
#incluir
#incluir
#incluir
int main ()

Archivo *leer;
buffer de char [50];
Sprintf (búfer, "Linux System Call");
read = popen ("wc -c", "w");
fwrite (búfer, sizeof (char), strlen (búfer), lectura);
pclose (leer);

Los caracteres que se muestran en el mensaje son "17" porque la cadena que hemos especificado anteriormente contiene "17" caracteres. El proceso "WC -C" lee estos caracteres y los imprime como una salida.

Ejemplo 4

El ejemplo anterior de Popen envía los datos de un proceso a otro. Aquí, recibiremos los datos de un proceso a otro proceso a través de una tubería. La función principal del programa es construir el búfer, que toma valores "50". Luego, creamos la variable "r", donde la función popen creó el proceso. El proceso "LS" se utiliza para enumerar los archivos del directorio y el proceso "R" para leer los datos de la tubería. El proceso "LS" transmite los datos al proceso "R" para leer. Después de esto, tenemos la función Fread, que lee los datos y almacena los datos en el búfer. Luego, la declaración de impresión imprimirá los datos almacenados en el búfer.

#incluir
#incluir
#incluir
#incluir
int main ()

Archivador;
buffer de char [50];
r = popen ("ls", "r");
fread (búfer, 1, 25, r);
printf ("%s \ n", búfer);
pclose (r);

Aquí solo se muestran "50" caracteres de los archivos existentes desde el directorio de trabajo. Por lo tanto, la salida solo tendrá 50 caracteres.

Conclusión

Hemos dado una demostración detallada de las llamadas del sistema Popen Linux en el lenguaje C. Hemos implementado cuatro ejemplos en los que hemos implementado la función popen. La función popen devuelve la corriente de tubería de acuerdo con el modo que hemos asignado. En los ejemplos, hemos utilizado el modo de lectura y escritura con las funciones de manejo de archivos Fread y FWrite. Hemos utilizado el nombre del programa en la función popen () como su primer argumento. El segundo argumento es un archivo "r" como lectura o "w" como modo de escritura.