Enviado em 09/11/2016 - 09:23h
Olá pessoal !
/*
**-------------------------------------------------------------------
**
** PIPE TEST:
**
** ARQUIVO:
** pipe.c
**
** COMPILE:
** gcc pipe.c -o pipe -Wall
**
**-------------------------------------------------------------------
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <io.h>
#include <fcntl.h>
char string[1024], buf[10];
int stdout_saved, i;
int mypipe[2];
int main()
{
stdout_saved = dup (STDOUT_FILENO); // salva
#ifdef __linux__
if (pipe(mypipe)) {
#endif
#ifdef _WIN32
if (_pipe (mypipe, 1024, O_TEXT)) {
#endif
printf ("pipe nao funfa ...\n");
return 0;
}
dup2 (mypipe[1], STDOUT_FILENO); // redireciona para stdout
close (mypipe[1]);
printf("PRIMEIRA LINHA\n");
printf("Segunda LInha\n");
printf("TERCEIRA CASA\n");
printf("CONTINUANDO FINALIZANDO testando\n");
printf("ULTIMA LINHA\n");
fflush (stdout);
//-------------------------------------------
// FICA PRESO AQUI NO LOOP ...
//-------------------------------------------
// Como copiar para o string sem "terminar o pipe" ???
//-------------------------------------------
//
i = 0;
while (read(mypipe[0], buf, 1))
{
string[i++] = buf[0];
}
string[i] = 0;
//-------------------------------------------
dup2 (stdout_saved, STDOUT_FILENO); // normaliza ( stdout ) para testar
/*
//------------------------------------------------------------
// se colocar aqui funciona normal ... nao fica presso no loop
//------------------------------------------------------------
//
i = 0;
while (read(mypipe[0], buf, 1))
{
string[i++] = buf[0];
}
string[i] = 0;
*/
printf("STRING(%s)\n", string);
return 0;
}
Atenção a quem posta conteúdo de dicas, scripts e tal (6)
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
O mínimo que você precisa saber sobre o terminal (parte 2)
O mínimo que você precisa saber sobre o terminal (parte 1)
Como iniciar uma máquina virtual do VirtualBox automaticamente no boot do LUbuntu 18 LTS
Como deixar as abas do Firefox mais fininhas
Mudar o gerenciador de login (GDM para SDDM)
"Tentando" fazer com que programas rodem no Wayland e no X11
Google Chrome não para de escrever no disco (2)
Notebook samsung 550xda não reconhece mais SSD (1)
Isso ta me cansando [RESOLVIDO] (4)
Inicio de uso do Mint 32bits (19)
Notebook instalado com Linux Debian de fábrica dando problema (3)