A sintaxe do cano() função é:
tubo int (int pipefd [2]);Aqui, a função Pipe () cria um canal de dados unidirecional para comunicação entre processos. Você passa em um int Matriz de tipo (número inteiro) PipeFD consistindo em 2 elemento de matriz no tubo de função (). Então a função Pipe () cria dois descritores de arquivo no PipeFD variedade.
O primeiro elemento do PipeFD variedade, PipeFD [0] é usado para ler dados do tubo.
O segundo elemento do PipeFD variedade, PipeFD [1] é usado para escrever dados no tubo.
No sucesso, a função Pipe () retorna 0. Se ocorrer um erro durante a inicialização do tubo, a função Pipe () retorna -1.
A função Pipe () é definida no cabeçalho unistd.h. Para usar a função Pipe () em seu programa C, você deve incluir o cabeçalho unistd.h do seguinte modo:
#incluirPara obter mais informações sobre a função do sistema Pipe (), consulte a página Man of Pipe () com o seguinte comando:
$ man 2 tuboExemplo 1:
Para o primeiro exemplo, crie um novo arquivo de origem C 1_pipe.c e digite as seguintes linhas de códigos.
#incluirAqui, incluí o arquivo de cabeçalho do Pipe () unistd.h primeiro com a seguinte linha.
#incluirEntão, no principal() função, eu defini o PIPEFDS Array inteiro de dois elementos com a seguinte linha.
int pipefds [2];Em seguida, executei a função Pipe () para inicializar a matriz dos descritores de arquivo PIPEFDS do seguinte modo.
tubo (PipeFDs)Eu também verifiquei os erros usando o valor de retorno da função Pipe (). Eu usei o saída() função para terminal o programa, caso a função do tubo falhe.
if (Pipe (PipeFds) == -1)Em seguida, imprimi o valor dos descritores de arquivo de leitura e gravação Pipefds [0] e Pipefds [1] respectivamente.
printf ("Leia o valor do descritor de arquivo: %d \ n", PipeFDS [0]);Se você executar o programa, verá a seguinte saída. Como você pode ver, o valor do descritor de arquivo de tubo de leitura Pipefds [0] é 3 e escreva o descritor de arquivo de tubulação Pipefds [1] é 4.
Exemplo 2:
Crie outro arquivo de origem C 2_pipe.c e digite as seguintes linhas de códigos.
#incluirEste programa mostra basicamente como escrever no tubo e ler os dados que você escreveu no tubo.
Aqui, eu armazenei um código de pino de 4 caracteres em um Caracteres variedade. O comprimento da matriz é 5 (incluindo o caractere nulo \ 0).
char *pin = "4128 \ 0";Cada caractere ASCII tem 1 byte de tamanho em C. Então, para enviar o pino de 4 dígitos através do tubo, você deve escrever 5 bytes (4 + 1 caractere nulo) de dados no tubo.
Para escrever 5 bytes de dados (alfinete) no cano, eu usei o escrever() função usando o descritor de arquivo de tubulação de gravação Pipefds [1] do seguinte modo.
Write (PipeFDs [1], Pin, 5);Agora que tenho alguns dados no tubo, posso lê -los no tubo usando o ler() função no descritor de arquivo de tubo de leitura Pipefds [0]. Como escrevi 5 bytes de dados (alfinete) no tubo, estarei lendo 5 bytes de dados do tubo também. Os dados lidos serão armazenados no amortecedor Array do personagem. Como eu estarei lendo 5 bytes de dados do tubo, o amortecedor A matriz de personagens deve ter pelo menos 5 bytes.
Eu defini o amortecedor matriz de personagens no início do principal() função.
buffer de char [5];Agora, posso ler o alfinete do tubo e armazená -lo no amortecedor Array com a seguinte linha.
Leia (PipeFDS [0], Buffer, 5);Agora que li o alfinete do tubo, posso imprimi -lo usando o printf () função como de costume.
printf ("Pin do tubo: %s \ n", buffer);Depois de executar o programa, a saída correta é exibida como você pode ver.
Exemplo 3:
Crie um novo arquivo de origem C 3_pipe.c como tipo nas seguintes linhas de códigos.
#incluirNeste exemplo, mostrei como usar o Pipe para comunicação entre processos. Enviei um alfinete do processo filho para o processo pai usando um tubo. Em seguida, leia o pino do tubo no processo pai e imprimiu -o do processo pai.
Primeiro, criei um processo infantil usando a função Fork ().
pid_t pid = fork ();Então, no processo infantil (pid == 0), Escrevi o alfinete no tubo usando o escrever() função.
Write (PipeFDs [1], Pin, 5);Depois que o pino é escrito no tubo do processo infantil, o processo pai (PID> 0) leia -o no tubo usando o ler() função.
Leia (PipeFDS [0], Buffer, 5);Então, o processo pai imprimiu o pino usando printf () função como de costume.
printf ("Pai recebeu o pino '%s' \ n", buffer);Como você pode ver, a execução do programa fornece o resultado esperado.
Exemplo 4:
Crie um novo arquivo de origem C 4_pipe.c como tipo nas seguintes linhas de códigos.
#incluirEste exemplo é o mesmo que Exemplo 3. A única diferença é que este programa cria continuamente um processo infantil, gera um alfinete no processo filho e envia o pino para o processo pai usando um tubo.
O processo pai lê o alfinete do tubo e o imprime.
Este programa gera um novo pino pin_length todos os segundos pin_wait_interval.
Como você pode ver, o programa funciona conforme o esperado.
Você só pode parar o programa pressionando + C.
Então, é assim que você usa o sistema Pipe () Chamada na linguagem de programação C. Obrigado por ler este artigo.