프로세스 대체가 FIFO 파일을 생성하는 시스템을 어떻게 결정합니까?


0

저는 C ++ 응용 프로그램을 작성 중이며 Bash 쉘에서 프로세스 대체로 작업해야합니다.

내 프로그램에 인수로 전달 된 경로를 확인하는 방법을 찾으려고 노력 중이며 일부는 프로세스 대체로 작성된 FIFO 파일을 가리 킵니다.

시스템에서이 파일을 만드는 지 확인할 수있는 셸 (또는 C ++) 방법이 있습니까? /dev/fd 아니면 그들이 다른 곳에서 만들어 졌다면?

답변:


0

짧은 대답은 당신이 이것을 할 수 없다는 것입니다. 디렉토리가 bash가 FIFO 경로를 두는 것을 기본값으로하기 때문에, 그 디렉토리의 특정 FIFO가 bash에 의해 작성되었거나 bash에 의해 명령에 인수로 전달되었음을 의미하지는 않습니다.

문제의 더 큰 그림을보십시오. 정말로 당신은 무엇을 해결하려고합니까?

만약 당신이 해결하려고하면, "내 프로그램의 출력은 항상 다른 프로그램으로 파이프되어야한다"그리고 나서 사용자가 bash의 애매한 프로세스 치환을 사용하지 않아도된다. 시스템의 기본 쉘이 zsh 일 경우 어떻게해야합니까? 본 껍질? 콘 쉘?

대신 프로그램이 파이프, 포크 및 exec 프로그램을 다른 프로그램에 작성하게하십시오.

그래서, 당신은 정말로 무엇을하려고합니까? 하나님이 금지하시는 경우, bash에 의해 생성 된 FIFO 대신 프로그램의 사용자가 전달한 파일에 출력 결과를 기록하면 어떻게됩니까?


나는 동의한다,이 요구는 조금 애매하다! 그러나 불행히도 응용 프로그램이 일부 하드웨어에 임베디드되어 실행되는 다른 응용 프로그램의 동작을 에뮬레이트하는 소프트웨어 시뮬레이터이기 때문에 불행히도 변경할 수 없습니다. 에뮬레이트하는 응용 프로그램은 저에게 쓰여지지 않았고 인수 구조를 변경할 수 없습니다. 이러한 시뮬레이터의 사용 사례는 매우 제한되어 있으므로 문제가 발생할 가능성은 낮습니다. 쉬운 방법 (bash 설정 파일 또는 기타 사항)이 있는지 궁금합니다. 감사!
Earl Sven

0

사용 -p ~에 대한 옵션 test 파일이 파이프 인 경우 :

#!/bin/bash
file="$1"
if [ -p "$file" ]
then
    echo "$file is a pipe"
fi

데모:

$ myscript.sh <(echo hello)
/dev/fd/63 is a pipe

고마워, 이것은 솔루션을 만드는 데 유용 할 수 있지만,이 파일이 기본적으로 만들어지는 위치 (대부분의 시스템에서는 / dev / fd)를 알려주지 않습니다. 환경 변수 또는이 경로가 무엇인지 확인할 수있는 것이 있습니까?
Earl Sven

왜? 그들이 만들어진 곳을 알 필요는 없습니다.
dogbane

필자가 알아야 할 이유는 응용 프로그램에 인수로 전달 된 경로를 확인하는 것입니다. 본질적으로 내가 부르는 것은 myProg -fifopaths >(/run/some/application) 내 프로그램이 본부에 대한 논쟁으로 통과 한 것으로 봅니다. /path/to/myProg -fifopaths /dev/fd/63 내 프로그램에 전달 된 경로가 실제로 유효한지 확인해야합니다. /dev/fd FIFO에 대한 경로인지 확인하십시오. 문제는 내 프로그램이 실행될 때 발생합니다. 시스템 -X FIFO 경로가없는 곳 /dev/fd,이 FIFO 경로가 어디에 있어야하는지 알고 싶습니다. 시스템 -X 인수를 검증하기 위해서.
Earl Sven
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.