#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int
main(int argc, char **argv)
{
int pfds[ 2], i;
size_t pbytrd;
pid_t childpid;
char buffer[ 200];
pipe(pfds);
if((childpid = fork()) == -1)
{
perror("fork error: ");
exit(1);
}
else if(childpid == 0)
{
close(pfds[ 0]);
dup2(pfds[1], 1);
close(pfds[ 1]);
for(i = 0; i < 10; i++)
printf("Hello...");
execlp("xterm","xterm","-e","./sample_a", (char *) 0);
exit(0);
}
else
{
close(pfds[ 1]);
for(; ;)
{
if((pbytrd = read(pfds[ 0], buffer, sizeof(buffer))) == -1)
{
perror(" read error: ");
exit(1);
}
else if(pbytrd == 0)
{
write(fileno(stdout), "Cannot read from pipe...\n", strlen("Cannot read from pipe...\n"));
exit(0);
}
else
{
write(fileno(stdout), "MESSAGE: ", strlen("MESSAGE: "));
write(fileno(stdout), buffer, pbytrd);
}
}
}
return(0);
Benim sample_a.c kod aşağıda: Yukarıdaki kodda
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int
main(int argc, char **argv)
{
int i;
for(i= 0; i< 10; i++)
write(fileno(stdout), "Hello...", strlen("Hello..."));
return(0);
}
, ne gerçekten yapmak istediğim: 1) Yönlendirme Çocuk işleminden borunun çıktısını alıp ebeveynin borudan okumasını ve bunu stdout'a yazdırmasını sağlayın.
Çocuk işlem çıktısını ("printf") stdout'tan boruya yeniden yönlendirebiliyorum ancak execlp'in alt işlemini, xterm, çıktısını boruya yeniden yönlendiremiyorum.
Bunu bana kimse anlatabilir mi?
ile yazabilirim, xterm parçasını çıkarırsam işe yarayacaktır. Üniversite web sitesinden birinde gördüğüm bir programlama sorusu. Alıştırma xterm penceresindeki kullanıcı tarafından giriş kabul edilir ve xterm üzerindeki görüntü çıkışı görüntülenir, ancak herhangi bir hata (perror), çağrıldığı yerden terminal penceresine yazdırılmalıdır. Yani xterm'in terminal penceresine geri dönüş yolu yok mu? Aslında bu büyük problemin küçük bir parçasıdır (5-6 sayfa problemi). Bu yardımcı olur umarım –