日期:2014-05-16  浏览次数:20663 次

为什么freebsd下的lockf我编译通不过呢.请大家指教
我在freebsd环境下写了个测试锁文件的程序.可是编译的时候通不过去.说
arpu_do_test.c:95:   `F_TLOCK '   undeclared   (first   use   in   this   function)
arpu_do_test.c:95:   (Each   undeclared   identifier   is   reported   only   once
arpu_do_test.c:95:   for   each   function   it   appears   in.)
arpu_do_test.c:107:   `F_ULOCK '   undeclared   (first   use   in   this   function)

int   mywritefile(const   char   *file_name,const   char   *write_msg,const   char   *create_flag,const   char   *   write_flag)
{
FILE   *fp=NULL;
int lock_flag=0;
int   lock_count=0;

if((fp=fopen(file_name, "r "))==NULL)
{
if(!strcmp(create_flag, "true "))
{
if((fp=fopen(file_name,write_flag))==NULL)
return   -1;
fprintf(fp, "%s ",write_msg);
fclose(fp);
return   1;
}
}
fclose(fp);

L1: if((fp=fopen(file_name,write_flag))==NULL)
return   -1;
lock_flag=lockf(fileno(fp),F_TLOCK,0L);
if(lock_flag <0)
{
lock_count++;
fclose(fp);
if(lock_count> 3);
return   -2;
sleep(1);
fp=NULL;
goto   L1;
}
fprintf(fp, "%s ",write_msg);
lockf(fileno(fp),F_ULOCK,0L);
fclose(fp);
return   0;
}

是怎么回事呢.请大家指教.谢谢

------解决方案--------------------
不好意思,有一个地方写错了
lockf是 SYSV的界面 flock是BSD的界面,标准的可移植的调用是fcntl,
详情参见:
http://docs.sun.com/app/docs/doc/819-7052/6n91ag9rv?l=zh&a=view