我在我的代码中使用fcntl来锁定文件并解锁以在Windows中像mutex一样练习... 我手动启动我的应用程序,我得到了正确的结果,应用程序运行顺利... 但我被要求制作一个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))
答案 0 :(得分:1)
如果没有看到您的锁定代码或知道如何从cron启动锁定代码,就没有太多可以继续下去了。
根据GNU C Library manual on File Locks,您可以在请求写锁定时获取EBADF
(错误文件描述符),其中文件描述符未打开以进行写访问。
fcntl man page补充说,当使用EBADF
时文件描述符打开模式与请求的锁定类型不匹配时,您可以获得F_SETLKW
。由于您的应用在手动启动时运行顺畅,我怀疑这是问题所在。
open
。根据这个Linux crontab man page,每个用户都有自己的crontab,任何给定crontab中的命令都将作为拥有crontab的用户执行。这取决于cron的版本,因为某些(较旧的)版本在crontab文件中指定用户。