유닉스에서 함수 찾기

유닉스에서 함수 찾기

나는 이해하려고 노력한다찾기(2) 기능유닉스 버전 6부터 시작합니다.

이 예:

seek(0,0,2)

따라서 첫 번째 매개변수는 파일 설명자입니다. 0은 표준 입력이 됩니다. 두 번째 매개변수는 오프셋(0)입니다. 세 번째 매개변수는 매뉴얼 페이지에 따라 "포인터는 파일 크기에 오프셋을 더한 값으로 설정됩니다."

그런데 왜 이런 일을 하겠습니까?왜 파일 뒷부분을 가리키고 있나요?

라인은소스 코드.

답변1

seek(0, 0, 2)파일 설명자 0에 의해 버퍼링된 모든 데이터는 건너 뜁니다 . 따라서 이 명령 이후에 이 파일 설명자에서 다음 번 읽기는아니요버퍼링된 내용을 읽으십시오.

코드를 검사하고 실제 목적이 무엇인지 보면 파일 설명자 0이 일반적으로 표준 입력임에도 불구하고 프로그램이 해당 파일 설명자를 통해 읽는 스크립트의 일부인 경우에만 실제로 작동한다는 것을 이해할 수 있을 것입니다.

예를 들어 다음 스크립트를 살펴보세요.

goto
echo "hello"

매개변수가 없으면 goto검색이 시작됩니다.

seek(0, 0, 2)명령이 없이 종료되는 경우 명령 호출자는 단순히 스크립트에서 다음 명령을 읽기 때문에 goto스크립트는 여전히 명령을 실행합니다 .echo "hello"goto

답변2

오류 조건으로 인해 반환하기 전에 표준 입력을 되감고 싶을 수도 있습니다.

if (argc<2 || ttyn(0)!='x') {
    write(1, "goto error\n", 11);
    seek(0, 0, 2);
    return;
}

답변3

seekfseek파일(파일 설명자(seek) 또는 파일 포인터(fseek))에서 현재 위치를 변경합니다 . C에서는 주로 fseek를 사용합니다. 파일 끝에서 시작하는 /fseek(SEEK_END)의 몇 가지 일반적인 용도는 다음과 같습니다.

파일 끝의 위치 =seek(f,0,2) or fseek(f,0,2)

파일 크기 계산 = fseek(f,0,2); size=ftell(f)

파일 끝 위치에서 20을 뺀 값 =fseek(f,-20,2)

일부 "파일"은 되돌릴 수 없습니다

답변4

오프셋이 0이므로 파일 뒤가 아니므로 파일 끝을 가리키며 일반적으로 파일에 데이터를 추가하는 데 사용됩니다.

이는 작성되었지만 읽혀지지 않은 입력을 재정의하기 위해 stdin을 통해 수행됩니다. 버퍼라고 부르는 것은 stdin이 파이프인 경우 더 이상 읽을 수 없을 때까지 읽혀지기 때문에 부정확합니다.
passwd 명령은 비밀번호 자체의 일부가 아닌 입력(예: Enter 키를 반복적으로 누르는 것)을 방지하고 비밀번호와 상호 작용하는 기본 스크립트를 방지하기 위해 이 작업을 수행합니다.

관련 정보