c - 如何在阅读(fopen)文件时阻止文件

标签 c linux file fopen chmod

如何在读取文件时阻止文件(通过 fopen 或在 linux 中打开),以防止在读取过程中进行任何修改?

我有: 1 个包含数据的文件;我想在我的函数中从中读取数据,所以我使用 fopen():

FILE *file = fopen(文件名, "r"); 现在我需要一些东西来阻止我的文件 - 任何(或只有当前用户的变体)另一个进程不能有任何访问权限(或只修改它作为变体)直到我的功能允许他们这样做

我想,我可以通过为它们设置 chmod 标志并在下类后将它们重新设置来做到这一点; 或者使用带有特殊标志参数的 open() 函数,但这是不可取的,因为我想在函数中使用 fgets();

有没有具体的例子?

最佳答案

是的,您可以使用 flock去做这个。但是,由于您想使用 fopen 而不是 open 打开文件,因此您需要先使用 fileno 获取文件描述符。 .例如:

FILE* f = fopen(...);
int fd = fileno(f);
// flock should return zero on success
flock(fd, LOCK_EX);

这会放置一个独占锁 - 如果您想要一个共享锁,请将 LOCK_EX 更改为 LOCK_SH

关于c - 如何在阅读(fopen)文件时阻止文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26313856/

相关文章:

python : Printing contents of a file to the terminal

c - 用 C 语言进行契约(Contract)设计,用于自动定理证明

c - 在什么情况下 C 需要指向指针的指针?

linux - aws linux 服务器停止发送电子邮件,显示 "Deferred: Connection timed out",邮件被困在队列中,如何解决此问题?

如果设备已插入,则不会调用 Linux USB 驱动程序探测

linux - "Upload of file ' ... ' was successful, but error occurred while setting the permissions and/or timestamp"在 PowerShell 中使用 WinSCP .NET 程序集时

java - 读取目录中的所有文件名

c - 被 K&R 练习 1.5.2 难住了

sql - 在c中生成动态sql

python - 打开: invalid mode or filename