Linux Popen System Chamada em C

Linux Popen System Chamada em C

““A função Popen () cumprirá o comando dado pelo comando da string. A função deve retornar um ponteiro para um fluxo usado para ler ou escrever no tubo, além de criar um tubo entre o aplicativo de chamada e o comando executado. A função Popen está disponível na biblioteca padrão da função de E/S e gera um segundo processo para executar um comando de terminal. A fase aberta do Popen () é a mesma que a fase aberta na função fopen (). A função Popen () inicia um processo bifurcando, construindo um tubo e executando o shell. Como um tubo é unidirecional por padrão; Como resultado, o fluxo é somente leitura ou apenas de gravação. Na função Popen () Execução bem -sucedida, é obtido um fluxo aberto que é usado para o tubo ler e escrever.”

Exemplo 1

Com o programa de exemplo a seguir, leremos os arquivos existentes no diretório ou pasta atual usando a chamada do sistema Popen. Em primeiro lugar, inserimos o stdio.H Arquivo de cabeçalho da biblioteca padrão C. Em seguida, temos uma função do programa Int Main () onde implantamos a função Popen. Antes disso, estabelecemos a variável de ponteiro "FileOpen" da classe "arquivo". A variável ponteiro do arquivo indica o byte seguinte para ler ou escrever.

Depois disso, atribuímos o valor limite do personagem a ser lido. A variável "FileOpen" então invocou a função "Popen". A função "Popen" assume o comando "LS -L" do Linux, que listará todos os arquivos do diretório atual. Além disso, inserimos o parâmetro "R" na função Popen, que indica o modo de leitura.

Aqui, nós colocamos o processo de lida de arquivos, utilizando a função Popen. Em seguida, processamos o tubo criado com o loop while. O While Loop usa os métodos fgets, que leva os argumentos "linha", "tamanho da linha" e "FileOpen". Os fgets leem o processo canalizado e o armazenaram no símbolo "%s" da string. Este símbolo específico é chamado dentro do método printf, juntamente com o argumento "Line". Depois de criarmos o tubo processado, com a função PCLOUSED, o processo canalizado pode ser fechado conforme implantado no final do programa abaixo.

#incluir
int main ()

Arquivo *fileOpen;
linha de char [130];
FILEOPEN = POPEN ("LS -L", "R");
while (fgets (linha, sizeof line, fileopen))

printf ("%s", linha);

pClose (FileOpen);

A função popen do programa C bifurou o processo acima e depois criou o tubo. Agora, executamos o tubo processado do fluxo no shell com o comando de compilação C. A saída listou todos os arquivos no diretório "home", pois executamos o programa nesse diretório.

Exemplo 2

No programa Popen anterior, temos uma demonstração simples da funcionalidade do programa Popen que é usado para canalizar o processo de streaming de leitura de arquivos. Agora, tomamos outro exemplo da função Popen, onde fizemos o processo com o modo de gravação. Vamos considerar o programa com a função principal. Construímos a variável do ponteiro do arquivo dentro da função principal como "arquivo". O ponteiro do arquivo é implantado com a função Popen.

A função Popen pega o comando "Cat" e o "W" para o modo de gravação. Aqui, cada argumento de arquivo é lido sequencialmente e enviado para saída padrão pelo comando CAT. No corpo de loop for, utilizamos a função Fprintf para imprimir os valores de contagem numérica, pois especificamos o símbolo "%d". Em seguida, fechado, o processo do tubo Popen com a chamada do sistema pclose.

#incluir
int main (int argc, char ** argv)
Arquivo *arquivo = Popen ("Cat", "W");
int x = 0;
para (x = 0; x<5;x++)
fprintf (arquivo, "my count = %d \ n", x);

pClose (arquivo);
retornar 0;

Quando executamos o processo criado acima, ele imprimiu os valores da contagem da seguinte maneira.

Exemplo 3

Agora, temos outro programa que transfere os dados de um processo para outro processo. Faremos isso com o tubo da função Popen. Implementamos o programa usando as bibliotecas padrão de C. Em seguida, temos uma função principal int para implantar um programa. Aqui, especificamos a string na função sprintf com o argumento "buffer". A função sprintf () mantém o resultado no buffer de char fornecido pelo sprintf, em vez de enviá -lo para o prompt.

Depois disso, chamamos a função Popen dentro da variável "leitura". Lá, temos dois processos dentro da função Popen. O "WC -C" é o primeiro processo usado para contar os caracteres fornecidos, e o segundo processo é o "W", que indica que o tubo está aberto no modo de escrita. Depois disso, temos a função "fwrite" que usa o tubo para escrever dados. Os dados serão recebidos pelo "WC", depois contou o personagem e exibido no shell.

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

Arquivo *leia;
buffer de char [50];
sprintf (buffer, "chamado do sistema Linux");
leitura = Popen ("WC -C", "W");
fwrite (buffer, sizeof (char), strlen (buffer), leitura);
pClose (leitura);

Os caracteres exibidos no prompt são "17" porque a string que especificamos acima contém "17" caracteres. O processo "WC -C" lê esses caracteres e os imprime como uma saída.

Exemplo 4

O exemplo acima de Popen envia os dados de um processo para outro. Aqui, receberemos os dados de um processo para o outro processo por meio de um tubo. A principal função do programa é construir o buffer, que leva os valores “50”. Em seguida, criamos a variável "r", onde a função Popen criou o processo. O processo "LS" é usado para listar os arquivos do diretório e o processo "R" para ler os dados do tubo. O processo "LS" transmite os dados para o processo "R" para ler. Depois disso, temos a função Fread, que lê os dados e armazena os dados no buffer. Em seguida, a declaração de impressão imprimirá os dados armazenados no buffer.

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

Arquivo *r;
buffer de char [50];
r = Popen ("LS", "R");
Fread (buffer, 1, 25, r);
printf ("%s \ n", buffer);
pClose (R);

Aqui apenas os caracteres “50” dos arquivos existentes são exibidos no diretório de trabalho. Portanto, a saída terá apenas 50 caracteres.

Conclusão

Fizemos uma demonstração detalhada de chamadas do sistema Popen Linux na linguagem C. Implementamos quatro exemplos em que implantamos a função Popen. A função Popen retorna o fluxo do tubo de acordo com o modo que atribuímos. Nos exemplos, usamos o modo de leitura e gravação com as funções de manuseio de arquivos Fread e Fwrite. Usamos o nome do programa na função Popen () como seu primeiro argumento. O segundo argumento é um arquivo "r" como leia ou "w" como modo de gravação.