목적 화일의 접근에 대한 고려를 하시기 바랍니다.
다른 프로세스에서 동일한 화일에 동시에 쓰기나 읽기를 하는지
그리고, fopen을 사용할 경우의 에러처리에 문제가 없는지 등.
매번 fopen를 호출하는 것이 속도적인 측면에서 큰 차이가 없다고 생각듭니다.
그리고, 동시 접근이 발생할 것 같으면 mutex를 사용해서 충돌방지를 하세요.
제목에서 ifsream를 사용하시라고 한 이유는 fopen를 아래와 같이 사용하셔야 할 경우가 있습니다.
for ( ; ; ) {
fin = fopen("/home/test/check.log","r");
if ( fin != NULL || errno != EINTR ) {
break;
}
}
C++에서 꼭 필요한 C의 함수이외는 자체 함수를 사용하시는 것이 가독성이나 유지보수에 좋다고 하더군요.(전 항상 동의는 못 합니다만 ^^;)
제 소견입니다.
지역 변수로 하셔도 프로그래밍에 문제가 없다면 그렇게 하는 게 좋을 것 같습니다. 만약 동일한 파일(스트림)을 다른 함수(다른 scope)에서 사용해야 한다면 멤버로 고려해보셔야 겠죠.^^(이때도 정적 변수로 할건지 멤버로 할 건지 신경써야 겠지요.)
만약 performance 때문에 그러신 거라면 "지역 변수 아니면 객체 멤버?" 이 선택의 문제 보단 더 근본적인 것을 고려해야 될 것 같습니다.
엉뚱한 데를 긁고 있는 거라면 죄송~
-------------------
한 사람이 더 행복해지는 세상을 위하여
C++이면 fopen보다 ifsream를 이용하세요.
목적 화일의 접근에 대한 고려를 하시기 바랍니다.
다른 프로세스에서 동일한 화일에 동시에 쓰기나 읽기를 하는지
그리고, fopen을 사용할 경우의 에러처리에 문제가 없는지 등.
매번 fopen를 호출하는 것이 속도적인 측면에서 큰 차이가 없다고 생각듭니다.
그리고, 동시 접근이 발생할 것 같으면 mutex를 사용해서 충돌방지를 하세요.
제목에서 ifsream를 사용하시라고 한 이유는 fopen를 아래와 같이 사용하셔야 할 경우가 있습니다.
for ( ; ; ) {
fin = fopen("/home/test/check.log","r");
if ( fin != NULL || errno != EINTR ) {
break;
}
}
C++에서 꼭 필요한 C의 함수이외는 자체 함수를 사용하시는 것이 가독성이나 유지보수에 좋다고 하더군요.(전 항상 동의는 못 합니다만 ^^;)
iostream 은 scanf, printf 보다 많이 느린데...
fstream 과 FILE * 의 차이는 어떤지 궁금하네요.
이 경우는 상관없는 이야기이긴 한 것 같습니다만...
거의 차이가 없다고 생각해도 무방합니다.
file입출력 관련함수들은 다른 API들에 비해서 상당히 느리며, virtual function call를 한두번 더 한다고 더 느리다고는 생각이 안 듭니다.
다만 화일의 크기, 읽기의 횟수, 버퍼의 사이즈들이 속도를 좌우한다고 봅니다.
C++ 입출력 API는 이미 최적화가 되어 있는 상태라고 보시면 됩니다.
혹시 실시간으로 나노단위까지 컨트롤해야 한다면 C나 어셈으로 할 수 밖에 없지만요.
그 외에는 그런 함수들을 적재적소에 사용하는 사람의 능력이 아닐까요.
댓글 달기