표준 입출력 binary 관련
글쓴이: wodnrrns / 작성시간: 금, 2010/10/15 - 1:17오후
안녕하세요.
제가 Mencoder를 이용해서 트랜스코더를 만들고, 스트리밍 서비스를 구현 중입니다.
다름이 아니라 트랜스코더에서 나오는 출력을 컨트롤 하고자 작업중인데요.
프로세스에서 표준 출력으로 나오는 정보를 읽어 바이트 단위로 확인하고 싶습니다.
현재 파일로 출력한 결과를 가지고 바이트 단위로 비교하는 작업은 잘되고 있는데요.
Mencoder에서 표준 출력으로 결과를 빼고 파이프로 (|) 제가 만든 모듈로 결과를 전달 하고 있습니다.
이때 비교 결과가 다르게 나오네요.
표준 출력을 binary로 받을 수는 없는것인지요.
tee를 사용해서 파일로 저장하고 읽을때 ("w+b") 옵션으로 읽어들이면 문제가 없는데
char in_data;
freed(&in_data,sizeof(char),1,stdin);
으로 받아들이면 안되네요.
표준 입력을 binary로 입력할 방법은 없을까요?
질문이 좀 두서없는것 같네요. 관련한 조그만 조언이라도 감사하겠습니다.
Forums:
[bushi@rose x86]$ cat
OTL
답변 감사드립니다.
우선 답변해 주신 내용은 파일입력이건 표준입력이건 리다이렉션으로 연결할때 차이가 없다는걸 보여주신걸로 이해가 되는데요.
제가 이해한 내용이 맞는지요.
보여주신 결과대로라면 저역시 같은결과를 내야 하는데.. 제가 어떤부분에서 잘못 건드린 부분이 있는것 같습니다.
한번 더 확인해보고 결과를 올리겠습니다.
stdin 에 혐의를 두긴
stdout, stdin 에 혐의를 두긴 어렵지 않나 싶어서 적었습니다.
제 경험(http://kldp.org/node/95974#comment-451371)의 경우엔,
데이터를 뱉어내는 놈이 날래지 못해서...
데이타를 소비하는 놈의 속도를 못 따라가는 상황이었습니다.
pipe 로 연결하건 fifo 로 연결하건 마찬가지였습니다.
setvbuf 에 뭐뭐에 별걸 다 써봐도 안되길래 아 이건 네트웍이 느린 것이거나 내가 프로그램을 잘못 만들었다 싶은 생각이 들었고,
gprof 로 돌려보니 예상대로... select 를 위해 read fdset 을 매번 재구성하는 것이 병목이더군요.
고치고 나서도 상황은 별로 개선이 되지 않길래, 이건 필시 네떡 탓이다라고 결론 내리고 그냥 내팽겨쳤습니다.
OTL
버그가 있네요.. ^^
질문하신 분이 "w+b"
질문하신 분이 "w+b" 로 여셨다길래 흉내냈습니다.
OTL
질문하신 분의 설명이 좀 모호하군요..
그럼 일부러 잘못된 프로그램을 보여주신 것인가요?
"wb" 모드로 open하게 되면 fread() 자체가 불가능하고
"w+b" 모드로 open한다고 해도 그 순간 이미 입력 파일이 truncate되기 때문에 아무런 데이터를 읽을 수 없을텐데요..
(이건 "wb" 모드로 open할 때도 마찬가지이긴 합니다만..)
일부러 잘못된
일부러 잘못된 프로그램을 보이려한 것은 아닙니다,
말씀하신대로... 따라하다 똑같이 저지른 '버그'가 맞습니다.
OTL
댓글 달기