出于某种原因,如果我进行第二次打开,它会编译,但是当我尝试运行它时,它没有像它被锁定一样。它缺少很多其他功能,因为它是学校项目正在进行的工作。如果我删除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));
}
}
答案 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
。