How To dup my fifo to stdin???

Hello...
I've studied FIFO in recent days...
and tried to write some code (Linux C) for practice...

but there are some bugs in my code...
I don't know how to solve it...

here is my code...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

int main(){
        char path[200]="./fifo.tmp";
        char str[200];
        int i, op;
        int myFifo;
        scanf("%d", &op);
        if(op %2 ==0){
                if(mkfifo(path, S_IRWXU | S_IRWXO | S_IRWXG)==-1)
                {
                        fprintf(stderr, "fail fifo\n"); fflush(stderr);
                }
                myFifo = open(path, O_RDWR);
                close(1);
                dup(myFifo);
                printf("yoyoyo");fflush(stdout);

                scanf("%d", &i);

        } else {
                myFifo = open(path, O_RDWR);

                //version 1
                read(myFifo, str, 6);

                //version 2 (with dup fifo to stdin)
                close(0);
                dup(myFifo);
                scanf("%s", str);

                fprintf(stderr, "---%s\n",str); fflush(stderr);

        }
}


after I build my program...

first, I run my program and type "0" to create a FIFO
and write some characters to FIFO
my program will stopped at scanf("%d", &i);

at this time, I run the same program, but type "1" to try to read the content of FIFO
If I use the code of version 1
the can be read by read(myFifo, str, 6);
but if I use the code of version 2
it can't be read by scanf("%s", str);
althought the FIFO has been dup to stdin

did I have some misconception about mkfifo() function ?
and how to fix my code ?

thanks.
Last edited on
Topic archived. No new replies allowed.