Programação C

Como usar a função pipe em linguagem C

Como usar a função pipe em linguagem C

Um tubo é um meio de comunicação entre processos. Um processo grava dados no tubo, e outro processo lê os dados do tubo. Neste artigo, veremos como a função pipe () é usada para implementar o conceito usando a linguagem C.

Sobre o Pipe

No tubo, os dados são mantidos em uma ordem FIFO, o que significa gravar dados em uma extremidade do tubo sequencialmente e ler dados de outra extremidade do tubo na mesma ordem sequencial.

Se algum processo for lido pelo canal, mas nenhum outro processo ainda não tiver sido gravado no canal, a leitura retornará o fim do arquivo. Se um processo deseja gravar em um tubo, mas não há outro processo conectado ao tubo para leitura, então esta é uma condição de erro, e o tubo gera um sinal SIGPIPE.

Arquivo de cabeçalho

#incluir

Sintaxe

int pipe (int filedes [2])

Argumentos

Esta função recebe um único argumento, uma matriz de dois inteiros (filedes). filedes [0] é usado para leitura do tubo, e filedes [1] é usado para escrever no tubo. O processo que deseja ler a partir do tubo deve fechar filedes [1], e o processo que deseja escrever no tubo deve fechar filedes [0].  Se as extremidades desnecessárias do tubo não forem fechadas explicitamente, o fim do arquivo (EOF) nunca será retornado.

Valores de retorno

Com sucesso, o tubo() retorna 0, em caso de falha a função retorna -1.

Pictorialmente, podemos representar o tubo() funcionar da seguinte forma:

Abaixo estão alguns exemplos que descrevem como usar a função pipe em linguagem C.

Exemplo 1

Neste exemplo, veremos como funciona a função de tubo. Embora usar um pipe em um único processo não seja muito útil, mas teremos uma ideia.

// Exemplo 1.c
#incluir
#incluir
#incluir
#incluir
int main ()

int n;
int filedes [2];
buffer char [1025];
char * message = "Olá, mundo!";
cachimbo (filedes);
escrever (filedes [1], mensagem, strlen (mensagem));
if ((n = ler (filedes [0], buffer, 1024))> = 0)
buffer [n] = 0; // termina a string
printf ("ler% d bytes do tubo:"% s "\ n", n, buffer);

senão
perror ("ler");
saída (0);

Aqui, primeiro criamos um tubo usando tubo() função, em seguida, escrito para o tubo usando fildes [1] fim. Então, os dados foram lidos usando a outra extremidade do tubo, que é filedes [0]. Para ler e gravar no arquivo, costumávamos leitura() e Escreva() funções.

Exemplo 2

Neste exemplo, veremos como os processos pai e filho se comunicam usando o tubo.

// Exemplo2.c
#incluir
#incluir
#incluir
#incluir
#incluir
int main ()

int filedes [2], nbytes;
pid_t childpid;
char string [] = "Olá, mundo!\ n ";
char readbuffer [80];
cachimbo (filedes);
if ((childpid = fork ()) == -1)

perror ("garfo");
saída (1);

if (childpid == 0)

close (filedes [0]); // O processo filho não precisa dessa extremidade do tubo
/ * Enviar "string" pelo lado de saída do tubo * /
escrever (filedes [1], string, (strlen (string) +1));
saída (0);

senão

/ * O processo pai fecha o lado de saída do tubo * /
close (filedes [1]); // O processo pai não precisa dessa extremidade do tubo
/ * Leia em uma string a partir do tubo * /
nbytes = ler (filedes [0], readbuffer, sizeof (readbuffer));
printf ("Ler string:% s", readbuffer);

return (0);

Primeiro, um canal foi criado usando a função de canal, em seguida, um processo filho foi bifurcado. Em seguida, o processo filho fecha a extremidade de leitura e grava no tubo. O processo pai fecha a extremidade de gravação e lê a partir do tubo e o exibe. Aqui, o fluxo de dados é apenas uma maneira que vai do filho para o pai.

Conclusão:

tubo() é uma chamada de sistema poderosa no Linux. Neste artigo, vimos apenas um fluxo de dados unilateral, um processo grava e outro processo lê, criando dois canais que podemos alcançar o fluxo de dados bidirecional também.

Controle e gerencie o movimento do mouse entre vários monitores no Windows 10
Gerenciador de mouse com tela dupla permite que você controle e configure o movimento do mouse entre vários monitores, diminuindo seus movimentos pert...
WinMouse permite que você personalize e melhore o movimento do ponteiro do mouse no PC com Windows
Se você quiser melhorar as funções padrão do ponteiro do mouse, use um freeware WinMouse. Ele adiciona mais recursos para ajudá-lo a obter o máximo do...
O botão esquerdo do mouse não funciona no Windows 10
Se você estiver usando um mouse dedicado com seu laptop ou computador desktop, mas o o botão esquerdo do mouse não funciona no Windows 10/8/7 por algu...