PERL 에 해당하는 글 : 2 개
2003.12.13 :: io buffer의 차이
2003.11.16 :: perl과 endian
perl의 경우 자체적으로 io buffer를 사용하는 것으로 보인다. 아님 말구..

어쨌든, perl에 있는 file system 관련 function들 중에는 io buffer를 사용하는
것들과, io buffer를 bypass하는 것들이 있다. 이것들을 섞어서 쓰면 당연히
문제가 된다. 현재 posb의 웹 소스의 경우가 그렇다. 그런데, io buffer를
사용하지 않는 function을 call하기 직전/직후에 io buffer가 flush된다면
괜찮다. 생각해 보면, "직후"의 io buffer flush는 없어도 될 듯하다. 어차피
io buffer가 flush됐으므로 io buffer를 사용하는 function들도 새로 buffer를
채워야 하니까.

지금 내가 알아본 바로는, flock() 같은 function은 io buffer를 flush하는
side-effect를 가진 것으로 보인다. 지금 Posb의 경우에 io buffer를 사용하지
않는 syswrite()을 자주 사용하고 있는데, 대부분의 경우에 syswrite()이
call되기 직전에 flock()를 call하고 있다. 몇몇 곳에서 그렇지 않은 부분이
있는데, 이번에 아이디 발급 코드의 버그도 거기에서 비롯된 것으로 보인다.
지금은 일단 그런 곳들을 찾아내서 syswrite()이 call되기 직전에 flock()를
부르게 하거나, 혹은 역시 io buffer를 사용하지 않는 sysseek()을 사용하였다.

그런데, 아직도 문제가 있다. 뭔가, 아직 발견하지 못한 다른 요인이 있는
모양이다. 머리털 빠지겠다. 다행히 숱이 많다지만.. ㅋㅋ

'기타' 카테고리의 다른 글

한글 fixedsys 역슬래쉬 패치  (0) 2005.12.19
Mozilla Thunderbird에서 PGP (GnuPG) 사용하기  (0) 2004.10.03
포스비의 인증방식  (0) 2003.11.01
jIRC  (0) 2003.08.24
웹 포스비의 UID.  (0) 2003.04.19
  
트랙백   |  댓글   |
perl을 통해서 binary data를 만들 때 주의할 점은 endian 문제이다.
perl에는 pack/unpack이라는 함수가 있는데 pack이라는 함수가
포스비 웹을 linux에서 돌리는 데 문제가 되었다. pack은 perl 에서
정의된 variable의 값을 file에 'write' 할수 있도록 바꿔준다.
포스비의 read action이 일어날 때 조회수를 읽어서 이것을
하나 증가시킨후에 다시 쓸 때에 어떤 conversion 방식을 사용하는가가
문제였다. 기존의 Sun 머신에서는 "S"를 사용했었는데 문제가 안 됐다.
그런데, intel 머신에서는 endian 문제로 말썽이다. "S"를 사용하면
아마도 big endian의 순서에 맞추어서 변환되는 것 같다. "V"를 사용하면
little endian 순서로 변환한다고 한다.
  
트랙백   |  댓글   |
 이전  1   다음 

최근댓글
fotowall :: ncloud RSS Feeds today :    yesterday :
total :