无法打开()第二个文件C.

时间:2015-12-04 17:51:02

标签: c

出于某种原因,如果我进行第二次打开,它会编译,但是当我尝试运行它时,它没有像它被锁定一样。它缺少很多其他功能,因为它是学校项目正在进行的工作。如果我删除open()之一,程序运行就好了。

#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define BUFFER_SIZE 100

#define INPUT "/tmp/father"

int main(int argc, char **argv)
{

    int fds;

    int fd;

    char mode[BUFFER_SIZE];

    char buffer[BUFFER_SIZE];

    unlink(INPUT);

    mkfifo(INPUT, S_IRUSR | S_IWUSR);

    if(argc != 2)
    {
        fputs("Argumentos invalidos\n", stderr);

        exit(EXIT_FAILURE);
    }

    fd = open(argv[1], O_WRONLY);

    if(fd == -1)
    {
        fprintf(stderr, "\nCan't open pipe\n");

        exit(EXIT_FAILURE);
    }

    fds = open(INPUT, O_RDONLY);

    if(fds == -1)
    {
        fprintf(stderr, "\nCan't open pipe\n");

        exit(EXIT_FAILURE);
    }

    while(1)
    {
        fgets(buffer,BUFFER_SIZE,stdin);

        sscanf(buffer,"%s", mode);      

        write(fd,buffer,strlen(buffer));
    }
}

1 个答案:

答案 0 :(得分:0)

你确定有问题吗?您正在读取标准输入(底部的fgets),并写入管道。你缺少的是读取管道的东西。因此,如果在另一个终端中输入:

$ cat /tmp/father

然后你输入你的编程的任何东西都会出现在那里。

所以,在一个终端我做:

$ ./test /tmp/father
line one
line two

在第二个终端:

$ cat /tmp/father

我看到了:

line one
line two

没有

P.S。您正在sscanf阅读buffer并写信至mode,然后写出buffer字符串。这并不重要,但您并未使用mode