09-23-2008
problem with pipes
I have written the following program. The function of this prog is to read data from a file(source.c) and write into another file(dest.c) using pipes. I have just written a line in the source file.Im able to compile and run the program without errors. But the data is not written onto the other file(dest.c);
please help!!!!!!!!!!!!!!!!!!!!!!
[code]
#include <sys/wait.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main()
{
int pfd[2],i=0,j=0;;
pid_t cpid;
char buf[20],ch,c;
FILE *fp1,*fp2;
fp1=fopen("source.c","r+");
if(fp1==NULL)
{
perror("Error opening source file\n");
}
while((ch=getc(fp1))!=EOF)
{
buf[i]=ch;
printf("i=%d ch=%c\n",i,ch);
i++;
}
buf[i] = '\0';
fclose(fp1);
if (pipe(pfd) == -1)
{
perror("pipe");
exit(EXIT_FAILURE);
}
cpid = fork();
if (cpid == -1)
{
perror("fork");
exit(EXIT_FAILURE);
}
if (cpid == 0)
{ /* Child reads from pipe */
char arr;
close(pfd[1]); /* Close unused write end */
fp2=fopen("dest.c","w+");
if(fp2==NULL)
{
perror("Error opening dest file\n");
_exit(1);
}
int i = 0;
while (i<=19)
{
read(pfd[0], &buf[i], sizeof(buf[i]));
c=buf[i];
putc(c,fp2);
i++;
}
close(pfd[0]);
_exit(EXIT_SUCCESS);
}
else
{ /* Parent writes argv[1] to pipe */
j=0;
close(pfd[0]); /* Close unused read end */
write(pfd[1], buf, strlen(buf));
j++;
close(pfd[1]); /* Reader will see EOF */
wait(NULL); /* Wait for child */
exit(EXIT_SUCCESS);
}
fclose(fp2);
}
10 More Discussions You Might Find Interesting
1. Filesystems, Disks and Memory
Hello!
How I can increase or decrease predefined pipe buffer size?
System FreeBSD 4.9 and RedHat Linux 9.0
Thanks! (1 Reply)
Discussion started by: Jus
1 Replies
2. Shell Programming and Scripting
Hi,
Can the cd command be invoked using pipes???
My actual question is slightly different. I am trying to run an executable from different folders and the path of these folders are obtained dynamically from the front end. Is there a way in which i can actually run the executable... (2 Replies)
Discussion started by: Sinbad
2 Replies
3. UNIX for Dummies Questions & Answers
im trying to figure out how to do the following:
using pipes to combine grep and find commands to print all lines in files that start with the letter f in the current directory that contain the word "test" for example?
again using pipes to combine grep and find command, how can I print all... (1 Reply)
Discussion started by: ez45
1 Replies
4. UNIX for Advanced & Expert Users
Hi all,
I tried the following command
$ find / -name xyx | ls -l
so logically it should show the listing of directory xyz , assuming there's only one instance of xyz . But the above command shows the listing of current directory instead.
I got the desired result using it in the... (4 Replies)
Discussion started by: bijeet_sunny
4 Replies
5. Programming
Hello all, I am trying to learn more about programming Unix pipes in C.
I have created a pipe that does od -bc < myfile | head
Now, I am trying to create od -bc < myfile | head | wc
Here is my code, and I know I might be off, thats why I am here so I can get some clarification.
#include... (1 Reply)
Discussion started by: petrca
1 Replies
6. Shell Programming and Scripting
Here is an example code that shows the issue I have:
#!/bin/bash
counter() {
seq 1000 | while read NUM; do
echo $NUM
echo "debug: $NUM" >&2
sleep 0.1 # slow it down so we know when this loop really ends
done
}
counter | grep --line-buffered "" | head -n1
... (10 Replies)
Discussion started by: tokland
10 Replies
7. Programming
problem solved. (1 Reply)
Discussion started by: superfons
1 Replies
8. Programming
I want to have a message send & receive through 2 half-duplex pipes
Flow of data
top half pipe
stdin--->parent(client) fd1--->pipe1-->child(server) fd1
bottom half pipe
child(server) fd2---->pipe2--->parent(client) fd2--->stdout
I need to have boundary structed message... (1 Reply)
Discussion started by: ouou
1 Replies
9. Programming
Hi!
I'm having problems with pipes... I need comunnications with childs processes and parents, but only one child can comunnicate with parent (first child), others childs can't.
A brief of code:
if(pipe(client1r)<0){
perror("pipe");
}
... (1 Reply)
Discussion started by: serpens11
1 Replies
10. Shell Programming and Scripting
I already manage to get the output that i want.. but wat if removing all the pipes and convert it 1 liner with less pipes. My command below can get the ouput that i want. i just want to remove the pipes or less pipes.
#cat file1
us-west-2a running i-3397a421... (2 Replies)
Discussion started by: kenshinhimura
2 Replies