Безымянная труба без вилки в C - PullRequest
0 голосов
/ 28 октября 2018

Мне нужно создать безымянный канал в C без fork ();

У меня есть код с 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 голосов
/ 28 октября 2018

Вы должны быть более точным, что вам нужно для этого делать?Просто отправка сообщения себе в рамках одного и того же процесса не имеет особого смысла.

В любом случае, вы можете буквально просто не разветвляться и делать все внутри одного процесса, это просто не очень полезно.

#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;
}
...