0

我在我的代码中使用 fcntl 来锁定文件并解锁以在 Windows 中像互斥锁一样练习...我在 linux 中手动启动我的应用程序,我得到了正确的结果,应用程序运行顺利...但我被要求制作一个 bash 脚本每天启动应用程序....我的脚本是

cd myapppaht
./myapp

[Bad file descriptor]但是,当它尝试锁定文件位置时,我得到了... crontab 任务实践是否不如手动用户 root 强大?

#define writew_lock(fd , offset , whence , len)  lock_reg((fd) , F_SETLKW , F_WRLCK , (offset) , (whence) , (len))

#define un_lock(fd , offset , whence , len)  lock_reg((fd) , F_SETLK , F_UNLCK , (offset) , (whence) , (len))
4

1 回答 1

1

在没有看到您的锁定代码或不知道它是如何从 cron 启动的情况下,没有什么可做的。

fcntl

根据关于文件锁的 GNU C 库手册,EBADF在请求文件描述符未打开以进行写访问的写锁时,您可以获得(Bad file descriptor)。

fcntl 手册页补充说,EBADF当使用F_SETLKW文件描述符打开模式与请求的锁类型不匹配时,您可以获得。由于您的应用程序在手动启动时运行顺利,我怀疑这是问题所在。

  • 由此,我将检查您对open.

crontab

根据这个 Linux crontab 手册页,每个用户都有自己的 crontab,并且任何给定 crontab 中的命令都将以拥有 crontab 的用户身份执行。这取决于 cron 的版本,因为某些(较旧的)版本在 crontab 文件本身中指定了用户。

  • 您还可以检查您的 crontab 设置。
于 2010-02-04T15:29:24.967 回答