span class=postbodyman page 에 더 잘 나와 있네요.
br /
br /
span style=font-weight: bold;주의/span: span style=color: blue;한쪽만 fcntl 로 lock 을 걸어서는 의미가 없습니다./span
br /
br /
/spantable align=center border=0 cellpadding=3 cellspacing=1 width=90%tbodytr tdspan class=genmedb코드:/b/span/td /tr tr td class=code/*
br /
Copyright (C) Information Equipment co.,LTD.
br /
All rights reserved.
br /
Code by JaeHyuk Cho lt;mailto:minzkn@infoeq.comgt;
br /
CVSTAG=$Header$
br /
*/
br /
br /
#include lt;sys/types.hgt;
br /
#include lt;sys/param.hgt; /* HZ */
br /
#include lt;stdio.hgt;
br /
#include lt;stdlib.hgt;
br /
#include lt;string.hgt;
br /
#include lt;unistd.hgt;
br /
#include lt;fcntl.hgt;
br /
#include lt;errno.hgt; /* errno , EAGAIN , EACCES */
br /
br /
int mz_flock(int s_handle, int s_switch)
br /
{
br /
int s_result = (-1); struct flock s_flock = {0, };
br /
s_flock.l_type = (s_switch == 0) ? (F_UNLCK) : ((F_RDLCK) | (F_WRLCK));
br /
#if 0 /* optional */
br /
s_flock.l_whence = SEEK_SET;
br /
s_flock.l_start = (off_t)0;
br /
s_flock.l_len = (off_t)0;
br /
s_flock.l_pid = (pid_t)0;
br /
#endif
br /
do
br /
{
br /
nbsp; if(fcntl(s_handle, F_SETLK, (struct flock *)(amp;s_flock)) != (-1)){ s_result = 1; break; }
br /
#if defined(EAGAIN) amp;amp; defined(EACCES)
br /
nbsp; if((errno != EAGAIN) amp;amp; (errno != EACCES))
br /
nbsp; {
br /
nbsp; nbsp;perror(lock failed);
br /
nbsp; nbsp;break;
br /
nbsp; }
br /
#endif
br /
nbsp; (void)fprintf(stdout, Already locked\n);
br /
nbsp; usleep((1000 / HZ) * 1000); /* HZ=100 , 10 ms */
br /
}while(1);
br /
return(s_result);
br /
}
br /
br /
int main(int s_argc, char **s_argv)
br /
{
br /
int s_handle;
br /
if(s_argc gt;= 2)
br /
{
br /
nbsp; s_handle = open(s_argv[1], O_RDWR);
br /
nbsp; if(s_handle != (-1))
br /
nbsp; {
br /
nbsp; nbsp;if(mz_flock(s_handle, 1) gt; 0)
br /
nbsp; nbsp;{
br /
nbsp; nbsp; (void)fprintf(stdout, LOCK\n);
br /
nbsp; nbsp; do{ sleep(1); }while(1);
br /
nbsp; nbsp; mz_flock(s_handle, 0); /* optional */
br /
nbsp; nbsp; (void)fprintf(stdout, UNLOCK\n);
br /
nbsp; nbsp;}
br /
nbsp; nbsp;else (void)fprintf(stdout, error\n);
br /
nbsp; nbsp;close(s_handle);
br /
nbsp; }
br /
nbsp; else perror(s_argv[1]);
br /
}
br /
else (void)fprintf(stdout, usage: %s lt;filegt;\n, s_argv[0]);
br /
return(0);
br /
}
br /
br /
/* End of source *//td /tr/tbody/tablespan class=postbodybr //span
받은 트랙백이 없고,
댓글이 없습니다.

글
댓글을 달아 주세요
댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/103댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/103