2009-11-22 4 views
4

저는과 같은 것을 쓰려고합니다. 그래서 모든 관련 오디오 포맷을 wav (PCM)로 디코딩하고 wav를 모든 관련 오디오 포맷으로 인코딩 할 수 있어야합니다. 필자는 디코더의 출력을 인코더의 입력에 직접 연결하여 병렬로이 작업을 수행하려고합니다. 대부분의 디코더에는 stdout으로 디코딩 할 수있는 옵션이 있지만 모든 디코더가 그런 것은 아닙니다. 일부는 파일 출력을 주장합니다.STDOUT가 아닌 파일에만 쓸 수있는 프로그램의 출력을 파이프하는 방법은 무엇입니까?

그래서 제 질문은, 어떻게 프로그램을 속일 수되는 것입니다 만 대신에 표준 출력을 사용하여에 지정된 파일로 출력? 또한 보완 질문 : 입력 파일에서 stdin을 읽는 데 필요한 프로그램을 어떻게 속일 수 있습니까?

프로그램이 결과 내에서 앞뒤로 탐색하기 때문에 불가능할 수 있습니까?

또한, 펄 오디오 변환기 항상도이를 지원 포맷 병렬 디코딩 및 인코딩을 수행하지 않음을 의미하는 중간 WAV 파일을 사용하여이 문제를 킨다.

PS : 네, 그냥 펄 오디오 변환기를 사용하지 않는 이유하지만 질문에 해당하지 않습니다. 리눅스에

+0

모든 답변을 주셔서 감사합니다. '/ dev/std *'와'/ proc/self/fd/*'와 같이 보이고 명명 된 파이프는 모두 더 비슷하거나 더 작습니다. –

답변

3

, 당신은 "파일"출력으로 /proc/self/fd/1을 제공 할 수 있습니다.
출력에서 ​​찾기를 시도하지 않는 프로그램에서 작동해야합니다. 출력 추구 할

일부 프로그램 (예를 들어, 디코딩이 완료되면 파일의 시작에서 요약 정보를 작성하는), 그리고 이것은 실제 파일 이외의 실패합니다 추구합니다.

fseek 또는 lseek의 반환 값을 프로그램에서 확인하면 프로그램에서 오류를 반환 할 가능성이 높습니다. 그렇지 않으면 오류가 발생할 가능성이 높습니다 (예 : 처음에는 잘못된 요약 정보, 마지막에는 추가 스팸이 있음). 유닉스 변종과는 Win32 가족 지원 named pipes

+1

'/ dev/std {in, out}'도 있습니다. –

+0

2 개의 프로그램을 함께 연결하려면 다음과 같이 할 수 있습니까? 'prog1 --outfile/proc/self/fd/1 | prog2 --infile/proc/self/fd/0' –

3

일부 운영체제. stdout/stdin 대신 사용할 수 있습니다.

+0

프로그램이 출력 파일 인수를 취하면, 그 이름을 가진 파일을 지우고 그 자체의 파일을 생성 할 가능성이 있습니다. 명명 된 파이프가 작동하지 않도록하지 않겠습니까? –

+2

출력 파일을 만드는 대부분의 프로그램은 먼저 파일을 삭제하지 않고 CREATE 플래그 및 TRUNC 플래그로 파일을 엽니 다. 존재하지 않는 파일을 생성하고 존재할 경우 내용을 자릅니다. 이것은 FIFO에서도 잘 작동합니다. – nos

2

명명 된 파이프를 만듭니다.

mkfifo /tmp/mypipe 

echo foo | wc -c 

당신이

echo foo > /tmp/myfifo & 
wc -c /tmp/myfifo 

을 (파이프의 다른 쪽 끝이 열릴 때까지 처음 시작 중이 차단됩니다) 파일로 사용할 수 있습니다 그러나 프로그램에 필요한 않는 경우, 맞아 예를 들어 실제 파일 추구,이 작동하지 않습니다.

1

파이프를 만들고 파이프에 출력을 할당하십시오.

관련 문제