2013-02-12 5 views
-2

ANSI C cgi-bin 서버 프로그램을 작성하고 있습니다. 프로그램의 각 인스턴스는 동일한 파일에 동시에 액세스 할 수 있습니다. 다음과 같이 내가 할 :ANSI C에서 파일을 올바르게 잠그는 방법

handle = fopen(name,type); 
fd = fileno(handle); 
MyLockFile(fd) //I use fcntl 
..... 

문제는 내가하지 "열기"와 "fopen을"로 파일을 열 것입니다. "잠금"같은 방식으로 작동합니까? "fd"를 잠글 수 있으며 "처리"할 수 없습니다.

이유는 "실행할 수있는"fd = open ... "코드를 쓸 수 없다는 것입니다. 아래 코드는 실행 파일을 만들고 쓰기 권한은 설정하지 않았습니다. 내가 쓸도이 파일에 추가 할 수 있습니다 둘 이유

fd = open(name,O_CREAT|O_WRONLY|S_IREAD|S_IWRITE|S_IRGRP| 
    S_IWGRP|S_IROTH|S_IWOTH); 
write(fd,data,strlen(data)); 
close(fd); 

모르겠어요.

답변

0

open() 함수가 잘못되었습니다. O_CREAT를 지정할 때 사용 권한 비트는 3. 인수 여야합니다.

open(name,O_CREAT|O_WRONLY, 
     S_IREAD|S_IWRITE|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); 
+0

오 예 !!!! 감사! 하지만 "fopen"으로 연 다음 "fd = fileno (handle)"로 열고 fd를 잠글 수 있습니까? – nms

+0

@nms 글쎄, fcntl 워드 프로세서는 "stdio (3) 라이브러리에 의해 수행되는 버퍼링 때문에 해당 패키지의 루틴으로 레코드 잠금을 사용하지 말고 대신 read (2)와 write (2)를 사용하십시오. " – nos

+0

"fopen "은 낮은 레벨의"open "루틴이고"open ","write ","fwrite "대신"read "를 사용해야합니다. 알았습니다. 당신은 !!! – nms

관련 문제