LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 912|回复: 3

文件怎么锁?

[复制链接]
发表于 2003-12-14 15:11:21 | 显示全部楼层 |阅读模式
已经使用了ANSI C的文件操作

想加一个锁 却没有函数实现

只有POSIX 和 BSD4.4的 flock和lockf 怎么办

怎么把FILE * fp 和 int fd 关联起来?



flock(锁定文件或解除锁定)  
相关函数  open,fcntl

表头文件  #include<sys/file.h>

定义函数  int flock(int fd,int operation);

函数说明  flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件,无法锁定文件的某一区域。

参数  operation有下列四种情况:
LOCK_SH 建立共享锁定。多个进程可同时对同一个文件作共享锁定。
LOCK_EX 建立互斥锁定。一个文件同时只有一个互斥锁定。
LOCK_UN 解除文件锁定状态。
LOCK_NB 无法建立锁定时,此操作可不被阻断,马上返回进程。通常与LOCK_SH或LOCK_EX 做OR(|)组合。
单一文件无法同时建立共享锁定和互斥锁定,而当使用dup()或fork()时文件描述词不会继承此种锁定。

返回值  返回0表示成功,若有错误则返回-1,错误代码存于errno。
 楼主| 发表于 2003-12-14 15:33:44 | 显示全部楼层

知道了 惭愧!!! 这两个函数用来标准衔接

fileno(返回文件流所使用的文件描述词)  
相关函数  open,fopen

表头文件  #include<stdio.h>

定义函数  int fileno(FILE * stream);

函数说明  fileno()用来取得参数stream指定的文件流所使用的文件描述词。

返回值  返回文件描述词。



fdopen(将文件描述词转为文件指针)  
相关函数  fopen,open,fclose

表头文件  #include<stdio.h>

定义函数  FILE * fdopen(int fildes,const char * mode);

函数说明  fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。

返回值  转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno中。
 楼主| 发表于 2003-12-15 15:26:17 | 显示全部楼层
有一个问题

使用 -ansi 并且警告打开的时候 在RH7下

fileno() 会被告警声明冲突 即使打开了 stdio.h中的 __USE_POSIX 也没用

不过而且在RH9下就不告警了 真是的!

RH7 的 gcc -v ~~~~~~~~~2.9
RH9 的 gcc -v ~~~~~~~~~3.2

我再去试其他的编译器吧
发表于 2003-12-15 15:36:16 | 显示全部楼层
与gcc各种版本对C的支持程度有关吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表