我试图编写一个测试程序来测试文件锁定是否正常工作。但是,其中一项测试失败了。我正在尝试获取文件的读取锁,但是测试失败。当我尝试打印错误号时,它打印了指示9
的{{1}},即错误的文件号(或文件描述符)。我还尝试打印文件描述符值,它打印了EBADF
,这似乎是有效的文件描述符。我正在使用Netbeans IDE及其简单测试功能。
要读取的文件与源代码文件位于同一文件夹中。
这是我的代码:
3
它显示以下输出:
在取消注释代码以获取写锁定时,将获取写锁定并写入文件,并且读锁定仍然失败,如下面的输出所示。但是,实际行为应该是读取锁定成功而写入锁定失败:
请帮助我找出测试失败的原因。
答案 0 :(得分:2)
在man page for fcntl上我们可以阅读
为了放置读取锁,必须打开fd进行读取。为了 要放置写锁,必须打开fd进行写操作。同时放置 类型的锁,以读写方式打开文件。
您正在使用以下文件打开文件
int fd = open("test_file.txt", O_WRONLY);
O_RDONLY 打开仅供阅读。
O_WRONLY 仅开放用于写作。
O_RDWR 开放供阅读和写作。如果将此标志应用于FIFO,结果是不确定的。
要放置读写锁,请使用打开文件
int fd = open("test_file.txt", O_RDWR);