C中没有叉的未命名管道

时间:2018-10-28 15:36:08

标签: c process pipe fork

我需要在没有fork()的情况下在C中创建未命名管道;

我有使用fork的代码,但是我找不到没有fork的未命名管道的任何信息。我读到这是一个旧的解决方案,但它只是需要它。谁能帮我吗?

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#define KOM "Message to parent\n"
int main()
{
    int potok_fd[2], count, status;
    char bufor[BUFSIZ];
    pipe(potok_fd);
    if (fork() == 0) {
        write(potok_fd[1], KOM, strlen(KOM));
        exit(0);
    }
    close(potok_fd[1]);
    while ((count = read(potok_fd[0], bufor, BUFSIZ)) > 0)
        write(1, bufor, count);
    wait(&status);
    return (status);
}

1 个答案:

答案 0 :(得分:0)

您应该更加精确,您需要做什么?只是在同一过程中向自己发送消息并没有多大意义。

无论如何,您实际上不可以分叉并在一个进程内完成所有操作,但这并不是真的有用。

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>
#define KOM "Message to parent\n"
int main()
{
    int potok_fd[2], count;
    char bufor[BUFSIZ];
    pipe(potok_fd);
    write(potok_fd[1], KOM, strlen(KOM));
    fcntl(potok_fd[0], F_SETFL, O_NONBLOCK);
    while ((count = read(potok_fd[0], bufor, BUFSIZ)) > 0)
        write(1, bufor, count);
    return 0;
}