我試圖實現匿名管道而不使用系統調用: pipe(),fork(),mkfifo(),open(),read(),write(),close()。實現匿名管道
基本上我實現的匿名管道與共享存儲器,其中兩個文件描述符(兩者都具有共享存儲器ID) 一個用於讀取器和其它用於寫入器,通過兩個信號量 其中我不唯一的情況進行通信不是指在叉子的情況下。
我的問題是我應該如何實施撥號電話,或者我應該如何處理這種情況。
我被允許使用pthread_atfork()和atexit()系統調用。
非常感謝。
P.S
我正在爲了強調究竟應該如何 我實施工作連接管道常規短代碼。
該代碼的作品!它只是爲了說明我的功能應該如何工作的 方式。
#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;
}
此致
埃利
謝謝,但正如我寫在我的問題。代碼正常工作,並且沒有必要更改它 –
爲了使匿名管道工作,我們使用fork。 我試圖實現共享內存和信號量的管道。 我的問題是我應該如何實施撥號電話,或者我應該如何處理這種情況。 順便說一句,這不是我的代碼。該代碼取自背誦網站 ,因此應該可以正常工作(忽略第一個關閉pfd [1]的事實) http://motigeva.com/os/files/pipe1.c –
所以你想模擬管道(2)使用其他OS-primitives/syscalls。家庭作業? – wildplasser