void init()
void init() {
setvbuf(stdin, 0, 2, 0);
setvbuf(stdout, 0, 2, 0);
}
이 친구가 가지는 의미가 뭔가요..?
#pwnable
작성자 정보
답변
2
p0her
Open Beta Tester
setvbuf
함수는 버퍼링 방식을 변경하는 함수입니다. 버퍼링이란 시스템 자원을 효율적으로 사용하기 위해 버퍼라는 공간에 담아두고 사용하는 방식인데, setvbuf(fd, 0, 2, 0)
에서 세번째 인자인 2는 _IONBF
를 의미하는 상수로 해당 file descriptor에 대해 버퍼링을 사용하지 않겠다는 의미입니다. 즉 stdin과 stdout을 사용할 때 버퍼링을 사용하는 것이 아닌 사용자와 프로그램이 바로바로 상호작용 하여 문제푸는데 불편함이 없도록 하는 방식으로 보입니다.
sangjun
공부벌레
위엣분의 답변에 첨언을 하자면 setvbuf
로 특정 fd에 써지는 값을 일시적으로
버퍼라고 하는 공간에 일시적으로 담아두고, 어떤 조건을 만족할 때만 fd에 써지도록 할 수 있습니다.
이를 통해서 효율적으로 시스템 자원을 쓸 수 있습니다.
어떤 조건으로는 버퍼 사용 없이 바로 fd로 쓰기
or 개행 만났을 때만 출력
이나 버퍼가 꽉 찼을 때
이 있습니다.
문제에서는 개행이나 다른 출력 조건이 만족하지 않을 시에 입/출력값이 안나올 수도 있기 때문에 setvbuf함수로 버퍼를 사용하지 않고
바로 fd에 입/출력하는것 같습니다.