Pipes
Comunicação entre processo pai e filho.
Pipes é uma aula grátis de C Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C Academy inclui 4 aulas no total.
O que é um pipe
Um pipe é um canal de comunicação unidirecional entre processos relacionados. Um processo escreve bytes nele e outro os lê, como em uma esteira de dados.
Dois descritores de arquivos
A chamada pipe() preenche uma matriz com dois elementos: fd[0] é a extremidade de leitura e fd[1] é a extremidade de escrita. Os dados escritos em fd[1] podem ser lidos de fd[0].
#include <unistd.h>
#include <stdio.h>
int make_pipe(int fd[2]) {
if (pipe(fd) < 0) { perror("pipe"); return -1; }
/* fd[0] read end, fd[1] write end */
return 0;
}Combinando com fork
Depois de fork(), o processo pai e o filho compartilham os descritores do pipe. É assim que pai e filho se comunicam: um escreve e o outro lê.
Feche as extremidades não utilizadas
Cada processo deve fechar a extremidade que não utiliza. Um leitor fecha a extremidade de escrita; um escritor fecha a extremidade de leitura. Caso contrário, o leitor nunca verá o fim do arquivo.
#include <unistd.h>
void parent_as_writer(int fd[2]) {
close(fd[0]); /* parent will not read */
write(fd[1], "hello", 5); /* parent writes */
close(fd[1]); /* signal EOF to reader */
}Um exemplo de pai e filho
O pai escreve uma mensagem; o filho a lê. Cada um fecha a extremidade de que não precisa.
#include <unistd.h>
#include <stdio.h>
void demo(int fd[2]) {
if (fork() == 0) { /* child: reader */
close(fd[1]);
char buf[64];
ssize_t n = read(fd[0], buf, sizeof buf - 1);
buf[n] = 0;
printf("child got: %s\n", buf);
close(fd[0]);
} else { /* parent: writer */
close(fd[0]);
write(fd[1], "hi child", 8);
close(fd[1]);
}
}A leitura retorna EOF
Quando todas as extremidades de escrita são fechadas, read retorna 0, sinalizando o fim do arquivo. Se uma extremidade de escrita permanecer aberta, o leitor ficará bloqueado esperando mais dados indefinidamente, um erro comum.
Capacidade e bloqueio do pipe
Um pipe tem um buffer finito (geralmente 64 KB). Quando ele fica cheio, write bloqueia até que um leitor o esvazie. Quando está vazio, read bloqueia até que os dados cheguem. Esse controle de fluxo sincroniza os dois processos.
Redirecionando com dup2
dup2 pode substituir a entrada ou a saída padrão de um processo por uma extremidade de um pipe. É assim que os shells implementam cmd1 | cmd2, conectando a saída de um comando à entrada do próximo.
#include <unistd.h>
void stdout_to_pipe(int fd[2]) {
close(fd[0]);
dup2(fd[1], STDOUT_FILENO); /* writes to stdout go into pipe */
close(fd[1]);
}Pipes nomeados (FIFOs)
Um pipe comum conecta apenas processos relacionados. Um pipe nomeado (FIFO), criado com mkfifo, aparece no sistema de arquivos, permitindo que processos não relacionados o abram pelo caminho e se comuniquem.
#include <sys/stat.h>
int make_fifo(const char *path) {
return mkfifo(path, 0666); /* creates a FIFO file */
}Perigo de SIGPIPE
Escrever em um pipe cuja extremidade de leitura está fechada gera SIGPIPE, que, por padrão, encerra o processo. Ignore o sinal ou verifique o erro EPIPE retornado por write.
Quando usar pipes
Pipes são ideais para fluxos simples e unidirecionais entre um processo pai e um filho ou para encadear programas. Para comunicação bidirecional ou entre processos não relacionados, considere FIFOs, sockets ou memória compartilhada.
Verificação rápida
Teste sua compreensão sobre pipes.
Recapitulação
Você aprendeu a usar pipes para a comunicação entre pai e filho.
pipe()fornece fd[0] (leitura) e fd[1] (escrita)- Combine-o com
fork; feche as extremidades não utilizadas - read retorna 0 no EOF quando todas as extremidades de escrita são fechadas
- FIFOs conectam processos não relacionados; tenha cuidado com SIGPIPE
Perguntas Frequentes
A aula “Pipes” é grátis?
Sim — o texto completo de “Pipes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C Academy, atualize para CoddyKit PRO. O curso de C Academy inclui 4 aulas no total.
O que vou aprender em “Pipes”?
Comunicação entre processo pai e filho. Você pratica C Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C Academy?
Nenhuma experiência prévia é necessária. C Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Pipes”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C Academy?
Sim. Cada aula de C Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.