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
크리에이티브 커먼즈 라이센스
Creative Commons License
2007/05/09 11:40 2007/05/09 11:40
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/103

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/103

트랙백 주소 :: http://blog.minzkn.com/trackback/103

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/103

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/103

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/103
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/103