共有メモリpipe()
に基づいて、システムコールをシミュレートするライブラリを実装しました。
これで、子プロセスを呼び出さなくても、コードを使用していないときでもコードは正常に機能します。fork()
私のライブラリは任意 int main()
のプログラムで動作する必要があるため、ここでの基本的な問題は、セマフォによる変更は、main
プログラムではなくライブラリで行う必要があるということです。
図書館 :
これがライブラリです:
static int flag = FALSE;
static int mutex_init = 0;
static pthread_mutex_t lock;
#define BUFFER 4096
int my_new_finish()
{
return 1; // always successful
}
void error_out(const char *msg)
{
perror(msg);
exit(EXIT_FAILURE);
}
main
これで、このライブラリは、を呼び出すプログラムを使用していないときに正常に機能しfork()
ます。
しかし、私が使用するときfork()
、すべての地獄のブレーキは緩みます。
例えば :
#include <stdio.h>
#include <stdlib.h>
int main()
{
int spd, pid, rb;
char buff[4096];
my_new_init();
if (my_new_fifo("tmp_shm_pipe",0666) < 0)
{
perror("my_new_fifo");
exit(1);
}
if (fork())
{
spd = my_new_open("tmp_shm_pipe", O_RDONLY, 0600);
if (spd < 0)
{
perror("PARENT: my_new_open");
exit(1);
}
rb = my_new_read(spd, buff, sizeof(buff));
if (rb > 0)
write(1, buff, rb);
}
else
{
spd = my_new_open("tmp_shm_pipe", O_WRONLY, 0600);
if (spd < 0)
{
perror("SON: my_new_open");
exit(1);
}
my_new_write(spd, "hello world!\n", sizeof("hello world!\n"));
}
my_new_close(spd);
my_new_un_link("tmp_shm_pipe");
my_new_finish();
return 0;
}
私の質問は:
main()
与えられるプログラムを「知らない」場合、上記のライブラリでセマフォを使用するにはどうすればよいですか?main()
(プログラムではなく)ライブラリにセマフォを入れようとしましたが、うまくいきませんでした。どうすれば正しくできるのか説明してもらえますか?
備考 :
main
これは単なる例であり、他にも数え切れないほどのmain
プログラムが与えられる可能性があることに注意してください。これは宿題です
とても有難い