????3. ???????????????
????flock()????????operation????????LOCK_UN????????????????????????????????????????????????????????????????????????????????????dup()??dup2()???????fcntl() F_DUPFD?????????μ???????????????????????????
????flock(fd?? LOCK_EX);
????new_fd = dup(fd);
????flock(new_fd?? LOCK_UN);
??????δ???????fd???????????????????????fd?????????????????????????????new_fd???????new_fd?????????????????????μ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????е???????????????????????????????????
??????????????????????????fork()???????????????????????????е????????????????????????????????????????????????????????????????????????????????
????flock (fd?? LOCK_EX);
????if (0 == fork ()) {
????flock (fd?? LOCK_UN);
????}
???????????????????????Щ??????????????????????????????????fork()??????????????????????????????????????????????????fork()??????????exec()?л???????????????????????????????close-on-exec?????????????????????????????????????????????????
????????????????open()????????????????????????????????????flock()??????????????????????????′??????????flock()????????
????fd1 = open ("test.txt"?? O_RDWD);
????fd2 = open ("test.txt"?? O_RDWD);
????flock (fd1?? LOCK_EX);
????flock (fd2?? LOCK_EX);
????4. flock()??????
????flock()?????????????????
??????????????????м????????????????????????Э??????????????????????????????и????????????????????????????????
???????flock()??????????????
???????NFS???????flock()?????????
?????????????????£??????????????????????????????????????????????????????????????????????????????????????????з???????????????????????????????IO??????????????