답변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
seek
fseek
파일(파일 설명자(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 키를 반복적으로 누르는 것)을 방지하고 비밀번호와 상호 작용하는 기본 스크립트를 방지하기 위해 이 작업을 수행합니다.