对文件的读取锁定失败,错误号为EBADF

时间:2018-06-30 07:46:38

标签: c++ unit-testing netbeans-8 file-locking

我试图编写一个测试程序来测试文件锁定是否正常工作。但是,其中一项测试失败了。我正在尝试获取文件的读取锁,但是测试失败。当我尝试打印错误号时,它打印了指示9的{​​{1}},即错误的文件号(或文件描述符)。我还尝试打印文件描述符值,它打印了EBADF,这似乎是有效的文件描述符。我正在使用Netbeans IDE及其简单测试功能。

要读取的文件与源代码文件位于同一文件夹中。

这是我的代码:

3

它显示以下输出:

Output

在取消注释代码以获取写锁定时,将获取写锁定并写入文件,并且读锁定仍然失败,如下面的输出所示。但是,实际行为应该是读取锁定成功而写入锁定失败:

enter image description here

请帮助我找出测试失败的原因。

1 个答案:

答案 0 :(得分:2)

man page for fcntl上我们可以阅读

  

为了放置读取锁,必须打开fd进行读取。为了          要放置写锁,必须打开fd进行写操作。同时放置          类型的锁,以读写方式打开文件。

您正在使用以下文件打开文件

int fd = open("test_file.txt", O_WRONLY);

来自man page for open

  

O_RDONLY   打开仅供阅读。

     

O_WRONLY   仅开放用于写作。

     

O_RDWR   开放供阅读和写作。如果将此标志应用于FIFO,结果是不确定的。

要放置读写锁,请使用打开文件

int fd = open("test_file.txt", O_RDWR);