완료됨
void init()

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

#pwnable
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 2
avatar
p0her
Open Beta Tester
avatar
p0her
Open Beta Tester

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

2022.05.31. 15:32
avatar
sangjun
공부벌레
avatar
sangjun
공부벌레

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

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

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

2022.06.01. 18:00