2016-09-10 2 views
1

C 프로그램에서 필자는 파일 설명자 (실제 예 : 14이지만 프로그램은 이것을 미리 알지 못함)를 작성하여 엽니 다. system(3)에 전화를 걸어 무언가를 실행하고 표준 출력을이 파일 설명자로 보냅니다. 물론 /bin/sh은 Bourne 셸이며 1>&14 양식의 구문을 인식하지 못합니다. Bourne 쉘이 14를보고 사용하도록하는 데 사용할 수있는 대체 구문 (아마도 중괄호 또는 무언가 사용)이 있습니까? 나는 물론 이들 중 하나를 할 수있는 :Bourne 셸 : 여러 자릿수 fd로 리디렉션하는 방법?

  1. 대신 system(3)fork/exec 콤보를 수행하고 손으로 리디렉션합니다.

  2. 출력을 파일로하고, 데이터 기술자에게 I 루트가 있기 때문에 14

  3. 파일 그로부터 복사 배시에 /bin/sh 점을 갖는다.

가장 우아한 방법은 Bourne 쉘이 여러 자릿수의 파일 설명자 번호를 허용하는 구문을 찾는 것입니다. 그런가요?

+1

나는 새로운 버전의'ksh93'이 다중 숫자 파일 기술자를 지원한다는 것을 알고 있습니다. 나는 당신을'1> {14}'등으로 참조 할 것이라고 확신한다. 그래서'zsh'와'bash'도이 특징을 가지고있을 것 같다. ".. 중괄호를 사용하여"물어 본 것처럼 어쩌면 시도해야합니까? Bourne Shell, 오리지널 유닉스 시스템과 관련된 표준 버전은 아니지만 Linux와 관련된보다 현대적인 버전에서 찾을 수있는 것을 알고 있습니다. (Linux 용 Bourne Shell이 ​​있습니까?). 행운을 빕니다. – shellter

+0

bourne shell (FreeBSD에서 사용하고 있는데, Linux에서는이 파일을 본 적이 없습니다),'1> & {14}'은 오류 메시지와 함께 실패하고'1> {14}'는 자동으로 실패합니다. bash는'1> & 14'을 사용합니다. 리눅스에서 (내가 마이그레이션 할 때) bash를/bin/sh로 사용했습니다. FreeBSD에서와 같은 것처럼 보입니다. 이것이 레거시 코드를 원활하게 작동시키는 가장 쉬운 방법입니다. –

+0

좋은 물건. 피드백/정보를 주셔서 감사합니다. 해결책을 결정한 것 같아서 앞으로 나아갈 수있어서 다행입니다. 모두에게 행운을 빕니다! – shellter

답변

1

최적화에 대한 내가 가장 좋아하는 규칙을 고려하십시오. (1) 최적화하지 마십시오. (2) 전문가의 경우 : 아직 최적화하지 마십시오.

질문에서 발생하는 상황은 하루에 최대 100 번 실행되는 코드에서 발생합니다. 이렇게하면 충분합니다 :

sprintf(big_string, 
     "bash -c \"somethingsomething 1>&%d\"", 
     the_fd 
     );