void init()

void init() {
setvbuf(stdin, 0, 2, 0);
setvbuf(stdout, 0, 2, 0);
}
이 친구가 가지는 의미가 뭔가요..?

#pwnable
작성자 정보
답변 2
avatar
p0her
Open Beta Tester

setvbuf 함수는 버퍼링 방식을 변경하는 함수입니다. 버퍼링이란 시스템 자원을 효율적으로 사용하기 위해 버퍼라는 공간에 담아두고 사용하는 방식인데, setvbuf(fd, 0, 2, 0) 에서 세번째 인자인 2는 _IONBF 를 의미하는 상수로 해당 file descriptor에 대해 버퍼링을 사용하지 않겠다는 의미입니다. 즉 stdin과 stdout을 사용할 때 버퍼링을 사용하는 것이 아닌 사용자와 프로그램이 바로바로 상호작용 하여 문제푸는데 불편함이 없도록 하는 방식으로 보입니다.

2022.05.31. 15:32
avatar
sangjun
공부벌레

위엣분의 답변에 첨언을 하자면 setvbuf로 특정 fd에 써지는 값을 일시적으로
버퍼라고 하는 공간에 일시적으로 담아두고, 어떤 조건을 만족할 때만 fd에 써지도록 할 수 있습니다.
이를 통해서 효율적으로 시스템 자원을 쓸 수 있습니다.

어떤 조건으로는 버퍼 사용 없이 바로 fd로 쓰기 or 개행 만났을 때만 출력이나 버퍼가 꽉 찼을 때이 있습니다.

문제에서는 개행이나 다른 출력 조건이 만족하지 않을 시에 입/출력값이 안나올 수도 있기 때문에 setvbuf함수로 버퍼를 사용하지 않고
바로 fd에 입/출력하는것 같습니다.

2022.06.01. 18:00
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기