【发布时间】:2019-04-01 23:41:21
【问题描述】:
我正在编写公司中有人为 Linux 编写的旧 C/C++ 代码。 代码使用 fopen() 打开一个文件,然后使用flock() 锁定文件:
FILE *fp=fopen("text.txt", "wt");
flock( fp, LOCK_EX );
问题是我在Linux上使用Eclipse编译代码时,编译器报错:
invalid conversion from ‘FILE*’ {aka ‘_IO_FILE*’} to ‘int’
flock() 显然将 int 作为第一个参数。
我可以使用什么函数将“FILE *”转换为 int?
【问题讨论】:
-
我不明白这怎么可能奏效;
flock在其整个历史中都采用了int(文件描述符)而不是FILE *。 -
击败我 :-( 原始代码是 C,而不是 C++,所以当时(20 年前)使用的编译器可能允许它。
-
@yaronki 肯定有 C 编译器会编译您的示例片段而不会抱怨,但在运行时,文件不会被锁定。可能
flock总是失败(我希望将errno设置为EBADF)并且没有人注意到。
标签: c linux eclipse locking fopen