私はfifoパイプを使ってお互いに話す2つのプログラムを書こうとしています。 例here(セクション5.2)を使用しましたが、mknodをmkfifoに変更してfgetsに変更しようとしました。 これは、(FIFOに書き込み、一つのプログラムの)コードです:mkfifoは2つのプロセスがお互いに話すようにします
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h> /*mkfifo, open */
#include <sys/wait.h>
#include <sys/stat.h> /* mkfifo, open */
#include <fcntl.h> /*open */
#define FIFO_PATH "/home/hana/Desktop"
#define BUFFER_SIZE 300
int main()
{
char buffer[BUFFER_SIZE];
int fd;
int wStatus;
mkfifo(FIFO_PATH, 666);
printf("waiting for readers\n");
fd = open(FIFO_PATH, O_RDWR);
while (fgets(buffer, BUFFER_SIZE, fd), !feof(stdin))
{
if ((wStatus = write(fd, buffer, strlen(buffer))) == -1)
perror("write");
else
printf("speak: wrote %d bytes\n", wStatus);
}
return 0;
}
私は、コンパイル・エラーが発生します:関数fgetsの引数渡し3は、整数からポインタになります。 したがって、fgetsはファイル記述子ではなくFILE *を想定しています。 どうすればよいですか? fgetsが動作するように何かを変更しますか?別の機能を使用しますか?
gcc(ansi、pedantic)でコンパイルしています。
おかげ
OPはコンパイルエラーと 'FILE * 'の取得方法についてしか聞いていないので、私は実際にコードを読んでいませんでした。 :) – pynexj
@whjm私はあなたの答えが間違っていたことを暗示していません。実際にあなたの票は私のものです。 – JeremyP
私も件名を変更し、タグ 'ipc'と' mkinfo'を削除しました。ちょうど転がった。 :) – pynexj