【问题标题】:Using flock() to lock a file opened with fopen() [duplicate]使用flock()锁定用fopen()打开的文件[重复]
【发布时间】: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


【解决方案1】:

你会想要fileno(3):

flock( fileno(fp), LOCK_EX);

【讨论】:

  • 当然!傻我!谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2017-10-19
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 2015-03-29
  • 2010-12-17
相关资源
最近更新 更多