C - Scanf没有阻塞命名管道/ FIFO

时间:2017-01-18 18:13:51

标签: c

通常当程序调用scanf时,它会等待stdin中的某些内容可供读取。我目前正在为输入创建一个fifo,另一个用于输出,将由另一个进程用来从后台进程写入读取。但是,后台进程似乎不等待其中的任何scanf,有谁知道为什么?

以下是代码:

背景:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
int main()
{
    int out, in, err;

    char *cFifo = "/tmp/out";
    char *cInFifo = "/tmp/in";

    mkfifo(cFifo, S_IRUSR|S_IWUSR);
    mkfifo(cInFifo, S_IRUSR|S_IWUSR);

    out = open(cFifo, O_RDWR|O_TRUNC|O_NONBLOCK);
    in = open(cInFifo, O_RDWR|O_TRUNC|O_NONBLOCK);

    dup2(out, STDOUT_FILENO);
    dup2(out, STDERR_FILENO);
    dup2(in, STDIN_FILENO);


    scanf("%*c");

    while(1)
    {
        scanf("%*c");
        printf("Hello\n");
        fflush(stdout);
    }

    return 0;
}

前景:

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
int main()
{

    int out, in;
    size_t i = 0;

    char bufOut[1024];
    char *cFifo = "/tmp/out";
    char *cFifoIn = "/tmp/in";

    out = open(cFifo, O_RDONLY);

    in = open(cFifoIn, O_WRONLY);


    while(1)
    {
        i =0;
        while(!i)
        {
            i = read(out, bufOut, 1024);
        }

        if(i)
            write(STDOUT_FILENO, bufOut, i);

    }
    return 0;
}

我已经尝试强制写入新输入fifo,但结果是一样的。

我已经检查过错误,并且所有内容都返回了预期的值,没有-1或与每个函数相关的任何其他错误

0 个答案:

没有答案