システムコールを使用せずに匿名パイプを実装しようとしています: pipe(), fork(), mkfifo(), open(), read(), write(), close() 。
基本的に、2 つのファイル記述子 (どちらも共有メモリ ID を持つ) がリーダー用に、もう 1 つはライター用に、2 つのセマフォを介して通信する共有メモリを使用して匿名パイプを実装しました。フォークのケース。
私の質問は、フォーク呼び出しをどのように実装するか、またはこの状況をどのように処理するかです。
pthread_atfork() および atexit() システムコールの使用が許可されています。
どうもありがとう。
ps
私の実装がどのように機能するかを正確に強調するために、パイプの通常の短いコードを添付しています。
コードは動作します!!! 私の関数がどのように機能するかを説明するためだけにあるのです。
#include<unistd.h>
#include <stdio.h>
int main()
{
int pfd[2], rb;
char buff[100];
//I implemented this syscall by allocating shared memory
if (pipe(pfd)<0)
{
return -1;
}
//here is my problem. I don’t know how to treat this syscall
if (fork())
{
sleep(5);
//I implemented this syscall by two file descriptors which communicate via two
//semaphores
write(pfd[1], "hello world\n", sizeof("hello world\n"));
wait(NULL);
}
else
{
//I implemented this syscall by two file descriptors which communicate via two
//semaphores
rb = read(pfd[0], buff, sizeof(buff));
if (rb < 0)
perror("SON: read");
else
{
printf("SON: writing %d\n", rb);
write(1, buff, rb);
}
}
return 0;
}
心から、
エリ