在 c unix 编程中,只允许在一个进程中使用 open() 打开文件

Allow opening a file with open() only in one process, in c unix programming

我正在创建一个应用程序 client/server。注册的用户位于他们的特定文件中。我需要我的客户只有一个进程可以使用该特定用户名登录。所以我认为最好的处理方法是禁止打开一个文件,如果它刚刚被另一个进程打开,但我不知道该怎么做。建议?谢谢! 我考虑过信号量,但我认为这不是最好的解决方案....

好的,我会使用 flock() 谢谢! ^^ 但是在 open() 之后会给我什么样的错误?

您可以使用 flock() 并对该文件设置独占锁。这将阻止除设置锁的进程之外的其他进程打开文件。

检查名为 flock 的系统 command/shell 命令。

因此,由于您只希望一个进程访问打开的文件,因此您将对文件描述符使用 LOCK_EX 操作(假设您使用的是系统调用)。

请浏览手册页。 man flock 用于 shell 命令,man 2 flock 用于系统调用。

如果您有一台处理所有用户的多线程服务器(但只有一个进程),那么最好只在内存中跟踪登录用户。在这种情况下,您可以使用互斥量(一种信号量)来确保一个连接锁定对特定用户配置文件的访问,并且每次新用户连接时,您都可以查询您的数据结构。例如,如果您使用的是 pthreads,则可以按如下方式定义一个数组,假设每个用户都有一个连续的整数 ID:

pthread_mutex_t YourServer::accountLocks[numberOfUsers]

如果您有多个单独的进程由于某种原因无法共享内存,那么锁定文件是一个选项。在那种情况下,你必须小心不要引入竞争条件,你可以使用 flock.

之类的东西