한계.

한계.

3.6 리디렉션Bash 매뉴얼은 다음과 같이 말합니다:

9보다 큰 파일 설명자를 사용하는 리디렉션은 쉘에서 내부적으로 사용되는 파일 설명자와 충돌할 수 있으므로 주의해서 사용해야 합니다.

그러나 장2.7 리디렉션내가 아는 한 POSIX 사양에는 수량 제한이 언급되어 있지 않습니까?

셸에 따라 어떤 제한 사항을 알고 있어야 합니까? 파일 설명자 번호가 이미 셸에서 내부적으로 사용되고 있는지 확인하고 건너뛸 수 있나요? 사용할 수 있는 최대 파일 설명자 수는 얼마입니까?

답변1

한계.

이러한 제한은 운영 체제에 따라 다르며 ulimit다음과 같은 영향을 받을 수 있습니다.

파일 설명자를 사용하여 프로그래밍합니다.

소규모 프로젝트

규칙을 사용하십시오. 관점에 따라 stdin, stdout 및 stderr이 각각 0, 1 및 2인 이유입니다. 프로그램 모음이 파일 설명자 9를 사용하여 일종의 게시/구독자에게 이벤트를 보내기로 결정한 경우 프로그램이 이 규칙을 따르는지 확인해야 합니다. 이것은 실제로 잘 작동합니다.

환경이나 매개변수를 통해 정보를 전달합니다.

GNU make에는 --jobserver-auth=R,W사용할 파일 설명자를 알려주는 옵션(R과 W는 숫자)이 있습니다.작동 중인 서버(이제 열린 파일 설명자를 전달하는 대신 명명된 파이프를 직접 열 수 있도록 하는 것이 더 좋습니다)

bash가 당신을 위해 선택하게 하세요.

당신이 말하는 경우

    exec {fred}>/tmp/fred.out
    echo hello >&$fred

그런 다음 bash는 파일 설명자를 선택하고 해당 값을 fred에 저장합니다. 그런 다음 두 번째 줄의 변수를 확장하여 >&해당 파일 설명자로 리디렉션됩니다.

답변2

쉘이 결정하도록 두는 것이 더 좋습니다

exec {somefd}<>myfile
exec {mysock}<>/dev/tcp/192.168.0.5/8888

echo somefd = $somefd
echo my socket file handle = $mysock
# to write to the socket
echo "howdy" >&$mysock
# to read a line back
IFS= read -u $mysock line
echo "$line"

# when done close file handles
exec {somefd}>&-
exec {mysock}>&-
unset somefd mysock

# happy coding

관련 정보