그때 파이프로부터 판독 및 C 코드의 다음 비트가 차단해야했지만 그것은 결코 블록라는 파이프
int pipe_fd;
int res;
int open_mode = O_RDONLY;
char buf[100];
int bytes_read = 0;
memset (buf, '\0', sizeof(buf));
pipe_fd = open(FIFO_NAME, open_mode);
if (access(FIFO_NAME, F_OK) == -1)
{
res = mkfifo(FIFO_NAME, 0777);
if (res != 0)
{
fprintf (stderr, "Could not create fifo %s\n", FIFO_NAME);
exit (EXIT_FAILURE);
}
}
for(;;)
{
do
{
res = read(pipe_fd, buf, sizeof(buf));
bytes_read += res;
}while (res > 0);
// process data then go back and block
............
}
그것이 배시 스크립트 일부 코드가 간단한 버퍼 전송 될 때 차단하지 읽기 이 './test 1'처럼
#!/bin/bash
pipe=/tmp/pipe
if [[ ! -p $pipe ]]; then
echo "Reader not running"
exit 1
fi
if [[ "$1" ]]; then
echo "some string" >$pipe
else
echo "q" >$pipe
fi
나는 GDB에서 C 코드 프로그램을 실행하고 처음에는 읽기에 차단 않지만 곧 내가 어떤 C 코드의 블록이 bash는 스크립트를 호출하지 않기 때문에, 성공적 수행 에서 버퍼를 읽은 다음 읽을 때마다 0 바이트가 읽혀집니다. 왜 더 이상 차단하지 않는지 확실하지 않습니다. '일부 문자열'데이터가 다른 쪽에서 올바르게 수신되었습니다.
나는 그냥 데이터 처리를 위해 대기 앉아서 다시 가서 가능한 한 빨리
많은 감사, 그것을 깨닫지 못했습니다. 다시 열기 전에 FIFO를 닫아야합니까 – tech74
@ tech74 : 분명히. 'open()'은 새로운 파일 기술자를 할당합니다 - 이전의 파일 기술자는'close()'를 사용하여 해제해야합니다. 기록기는 다시 읽기 위해 FIFO를 다시 열 때까지 차단됩니다. – Dummy00001
+1 링크! –