C 라이브러리 함수

C 라이브러리 함수

다음 사이에 미묘한 차이점이 있습니까?

file

그리고

./file

상대 경로로?

답변1

셸이나 exec*p()libc 함수 에서 명령 이름으로 사용되면 현재 file디렉터리를 조회하고 file( $PATH또는 셸의 경우 내장 버전을 호출하거나 해당 이름으로 함수를 호출할 수 있음) ./file현재 디렉터리를 찾습니다. 디렉토리가 실행됩니다.

이는 특별한 동작을 유발하지 않으며 , ./명령 이름 /$PATH. 을 포함하도록 ./cmd주어진다 .cmd/

./접두사는 파일 이름이 특정 명령에 문제가 되는 문자로 시작하지 않도록 하기 위해 일반적으로 사용됩니다.

예를 들어:

rm ./-f

삭제 -f, while 이 옵션 으로 호출 rm -f됩니다 ( 또한 사용 가능). 또는:rm-frm -- -f

cat ./-
awk '{print $1}' ./a==b.txt

거기엔 도움이 되지 않습니다 --.

확장으로 인해 문제가 있는 문자가 생성되는지 알 수 없는 스크립트에서 rm ./*또는 스크립트를 찾습니다 .awk ... ./**

답변2

예. 일부.

C 라이브러리 함수

다른 답변에서 언급했듯이 exec*p()라이브러리 함수 계열은 이름에 슬래시 문자가 포함되어 있는지 여부를 사용하여 경로 검색을 수행해야 하는지 여부를 테스트합니다.

추가 읽기

기타 검색 경로 관련 내용

물론 프로그램은 C 라이브러리 외부에서 자체 경로 검색을 수행할 수 있습니다. 그들은 그것을 실행하는 대신 다른 것을 찾고 있을 수도 있습니다. 또는 C 라이브러리 함수와 약간 다른 동작을 원할 수도 있습니다. 이는 POSIX 표준이 요구하는 것이 무엇인지 모르는 사람들에게는 거의 알려지지 않은 놀라움을 선사합니다. 그래서 그들은 자체 검색 코드를 구현했습니다. 일반적으로 C 라이브러리 규칙을 따르며 이름에 슬래시 문자가 포함되어 있으면 이름을 그대로 사용합니다.

예를 들어:

그러한 검색을 수행하고 이러한 동작을 수행하는 메커니즘을 CDPATH갖춘 쉘 입니다. cdpathTENEX C 쉘은 다음과 같습니다.

~>cdpath=(/usr/) 설정
~> cd ./etc.
./etc: 해당 파일이나 디렉터리가 없습니다.
~>CD 등
/등
/etc>

빼기 기호로 시작하는 파일 이름

빼기 기호로 시작하는 파일 이름이 명령줄 옵션으로 처리되지 않도록 하는 한 가지 방법은 앞에 를 붙이는 것입니다 ./.

  • rm ./-rf파일 이름이며 rm -rf명령줄 옵션입니다.
  • find ./-name wibble두 개의 디렉터리 트리가 검색되고 모든 것이 발견되는 반면, find -name wibble하나의 디렉터리 트리가 검색되고 패턴 일치가 적용됩니다.

추가 읽기

명령 구문이 이를 중요하게 만듭니다.

때로는 명령의 구문이 마침표로 시작하는 경우 파일 이름이 되도록 정의되기도 합니다. 그렇지 않으면 그것은 다른 것입니다. 어떤 면에서 이는 옵션 문자로서의 빼기 기호에 대한 규칙을 일반화한 것입니다.

예를 들어:

댄 번스타인과 함께multilogdaemontools에서, Bruce Guentermultilogdaemontools-encore, djbwares에서multilog그리고 로랑 벨코트(Laurent Belcote)s6-logs6부터 명령줄 매개변수는 다음과 같습니다.녹음 스크립트각 매개변수의 첫 글자는 해당 스크립트 명령의 유형을 나타냅니다. 로그 디렉터리를 나타내려면 슬래시나 마침표 문자로 시작하는 명령 문자열 인수를 제공해야 합니다. multilog ./t ./u두 디렉터리에 로깅을 의미하는 반면, multilog t ./u하나의 디렉터리에 로깅하고 타임스탬프를 추가하는 것을 의미합니다.

답변3

filePATH귀하의 파일에서 이 파일이 검색됩니다.

./file무시 PATH하고 현재 디렉터리에서 검색합니다.

관련 정보