시스템에서 프로세스 대체가 FIFO 파일을 생성하는 위치를 어떻게 확인할 수 있습니까?

시스템에서 프로세스 대체가 FIFO 파일을 생성하는 위치를 어떻게 확인할 수 있습니까?

저는 C++ 애플리케이션을 작성 중이며 Bash 셸에서 프로세스 대체 작업을 해야 합니다.

내 프로그램에 인수로 전달된 경로의 유효성을 검사하는 방법을 찾으려고 합니다. 그 중 일부는 프로세스 대체에 의해 생성된 FIFO 파일을 가리킵니다.

/dev/fd시스템이 이러한 파일을 생성하는지 아니면 다른 위치에서 생성되는지 확인할 수 있는 셸(또는 C++) 방법이 있습니까 ?

답변1

짧은 대답은 당신이 이것을 할 수 없다는 것입니다. bash가 기본적으로 fifo 경로를 배치하는 디렉토리가 있다고 해서 해당 디렉토리의 특정 fifo가 bash에 의해 생성되었거나 bash에 의해 명령에 대한 인수로 전달되었다는 의미는 아닙니다.

문제의 더 큰 그림을 살펴보십시오. 정말로 무엇을 해결하려고 하시나요?

"내 프로그램의 출력은 항상 다른 프로그램으로 파이프되어야 합니다"라는 문제를 해결하려는 경우 사용자에게 bash의 모호한 프로세스 대체를 사용하도록 요구하지 마십시오. 시스템의 기본 셸이 zsh라면 어떻게 될까요? 본 쉘? 콘 껍질?

대신, 프로그램에서 파이프를 만들고, 분기하고, 다른 프로그램을 실행하도록 하세요.

그럼, 당신은 정말로 무엇을 하려고 하는 걸까요? bash가 만든 fifo 대신 프로그램 사용자가 전달한 파일에 출력을 기록하면 어떻게 될까요?

답변2

파일이 파이프인 경우 -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

관련 정보