问题标签 [flock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
617 浏览

php - 使用群和移动进行有效的文件更新

我想更新一个文件,而其他进程可能正在读取它。PHPflock()函数正是允许这样做的。

然而,正如我所见,flock 只需要一个文件句柄 .. 这通常来自 fopen。如果我想有效地做到这一点,我不想保持文件打开并写入它,因为文件正在通过网络传输并且写入操作可能会持续几秒钟(比如 2-3 秒)。

所以我希望是否可以将数据写入临时文件然后移动它。在那种情况下,文件的读者只会在我重命名它时受到干扰。

现在将数据写入 temp 将不需要我使用flock。但是,如何使用锁定将临时文件正确移动到实​​际文件。

我还想知道我是否真的需要首先锁定......移动操作不会很快吗?它会伤害同时读取文件吗?而且我预计会有 100 次读取,但只有一次更新,并且该更新将每小时发生一次

0 投票
1 回答
3285 浏览

php - fopen(file,w+) 截断文件,然后我可以检查它是否被flock() 锁定

我有一个接收文件名和 json 对象以写入文本文件的函数。

对象已更新,需要完全替换文件的当前内容。每个站点访问者都有自己的文件。多次快速更改会导致文件被截断fopen(file,w+),然后在锁定时不写入。最终结果是空文件。

我确信有一种标准的简单方法可以做到这一点,因为这是一种常见的活动。理想情况下,我正在寻找一种在使用fopeninw+模式截断文件之前检查文件是否有锁的方法或切换模式的方法。

您必须截断文件fopen()以获取要传递的文件句柄以flock()检查它是否已锁定,这似乎很奇怪——但您只是截断了它,那有什么意义呢?

这是我到目前为止的功能:

0 投票
5 回答
5417 浏览

node.js - 如何在 node.js 的单个进程中同步对文件的访问?

我有一个 Web 服务器,可以读取和写入磁盘上的数据文件。我希望仅在单个 Web 请求中写入文件。

这是一个说明我的问题的示例程序。它在“/tmp/rw.txt”中保存一个状态文件,并在每次 Web 命中时递增整数内容。运行这个程序,然后运行类似的东西ab -n 10000 -c 1000 http://localhost:3000/,表明多次命中从文件中读取了相同的值,并且多次写入。

注意:我知道 flock() 和fs-ext。但是,flock() 会将文件锁定到当前进程;因为这里的所有访问都在同一个进程中,flock() 不起作用(并且使这个例子相当复杂)。

另请注意,我通常会使用 express、async 等来完成大部分工作;只是为了举例而坚持基础。

0 投票
2 回答
930 浏览

c++ - 将继承与基于 stdvector 的植绒一起使用

目前我正在从事一项任务,我必须为此创建一个具有不同子类的植绒系统,这些子类的行为不同。我正在使用 OpenFrameworks 和 C++。我对开放框架和 C++ 很陌生。

作为基础,我使用以下代码: https ://sites.google.com/site/ofauckland/examples/ofxflocking-example

然而问题是,这段代码的结构与我习惯的不同;用'new ...'创建新的类对象

我的问题是,我怎样才能使用两个植绒类?首先,首先只使用不同的颜色。

到目前为止,我添加的子类之一是:

我为超类 Boid 的 void draw 使用了虚拟 void draw 并使用了 boids.push_back(*new Team1()); 在设置和鼠标拖动。这会产生以下错误:

  • 之前的预期类型说明符Team1
  • )之前预计Team1
  • 没有匹配的调用函数std::vector<Boid, std::allocator<Boid> >::push_back(int&)

完整代码:(所有代码都在一个 testapp.cpp 文件中,以排除链接问题)

超类Boid:

构造函数:

子类:

向量初始化:

-

0 投票
2 回答
2449 浏览

php - PHPflock() 非阻塞仍然阻塞为什么?

我正在使用flock()函数通过获取临时文件的锁定来检查脚本的另一个实例是否已经在运行,因此下一个实例应该检查文件是否未锁定,否则它会停止

当从不同的浏览器同时调用文件两次时,脚本可以正常工作,而如果我从同一个浏览器同时打开两个实例,它会等待,即第一个调用获取锁定,第二个调用等待锁定而不关闭

我知道可能有其他方法可以检查文件实例是否已经在工作,但他们中的大多数人会做某事然后撤消它,在我的用例中,脚本可能随时结束,因为它可能需要很长时间或超过内存限制或出于任何原因

有什么帮助吗?

0 投票
1 回答
23858 浏览

bash - bash羊群:为什么是200?

关于那个线程: bash羊群:如果无法获得锁则退出

如果有人可以向我解释“200”代表什么,我将不胜感激。

我读过关于flock 的文章,如果指定一个文件描述符似乎是200,但是这个数字有什么好处呢?

0 投票
1 回答
973 浏览

bash - Bash:执行外部脚本时如何锁定

这是我的 bash 代码:

我连续从两个 shell 运行脚本,只要第一个处于“sleep 5”,一切正常,这意味着另一个没有启动。但是,当第一个轮到从另一个脚本(其他文件)执行代码时,第二个运行开始执行。

所以我在这里有两个问题:

  1. 我应该怎么做才能防止该脚本及其所有“子代”在脚本或其“子代”仍在运行时运行。(除了“孩子”之外,我没有找到更合适的表达方式来运行另一个脚本,对此感到抱歉:))。

  2. 根据手册页, -n 导致进程在未能获得锁定时退出,但据我所知,它只是等到它可以运行。我错过了什么?

0 投票
1 回答
925 浏览

bash - bash:flock 会阻止一起运行脚本吗?

对不起,我不能完全集中我的问题。

我正在尝试使用flock 来避免同时运行脚本,就像在接受的答案中描述的那样: 如何防止脚本同时运行?

我记得有人说这样可能会出现根本无法运行脚本之类的问题。

有人知道这种可能性吗?

我尝试了以下场景:

  1. 运行脚本后立即运行它 - 它第二次完美运行
  2. CTRL用+中断脚本,C然后再次运行 - 第二次运行没问题
  3. 在脚本运行时突然关闭机器,打开机器电源并重新运行脚本 - 结果相同:没问题

我想不出更复杂的可能性。

0 投票
1 回答
1603 浏览

php - 为什么我的 php 群在运行两次命令时没有检测到现有的锁?

稍微解释一下,我有一个 Symfony2 设置。我正在使用我扩展的抽象命令类。我希望这些批次中的任何一个只能运行一次。我的目标是制作一个我打开并聚集的锁定文件,以便当 php 脚本以任何可能的方式终止时自动释放锁定。

为了实现这一点,我创建了一个名为 Lock 的类。此类扩展了 SplFileObject 并且基本上是在某处(通常是 /var/lock/*)创建 *.lock 的包装器。现在我在检测这个锁时遇到了问题。我确实有一个使用 fopen 和flock 的设置。由于某种原因,它不会再检测到它了。

我创建了一个 OOP 结构来基本上做我想做的事:

  • 确定锁定文件的名称(使用文件夹)
  • 创建一个锁对象
    • 如果目录不存在,则创建目录并锁定文件
    • 调用 SplFileObject::__construct()
  • 锁定文件

我不能让它与句柄和 spl 文件对象一起使用。如果我运行脚本,让它休眠 15 秒并在另一个控制台中运行相同的脚本,我将得到脚本成功锁定文件的结果,flock 返回 true。如果我在同一个脚本中的同一个锁文件上创建 2 个 Lock 对象,我在第一个锁上得到 true,在第二个上得到 false,这意味着它第二次无法获得锁。该脚本似乎有效。

但是,当我在两个脚本中使用 2 个锁运行脚本 2 次时,我在两个脚本上都得到 True 和 false ......这意味着它似乎没有跨脚本正确锁定文件:/

有没有人可以告诉我我做错了什么?我检查了文件名,两次运行脚本时它都相同。我尝试了多种权限,例如 777、755、733,但没有区别。

我这样称呼它(只是课程的一部分):

锁.php

0 投票
2 回答
3475 浏览

linux - 在 QNAP NAS 上安装 node.js 时显示“flock: Command not found”

我想在 QNAP NAS 上安装 node.js,它是一个 linux 操作系统,我可以使用 ipkg 安装包。但 ipkg 没有 node.js ......

我将网络论坛称为http://forum.qnap.com/viewtopic.php?p=248556,安装了 V8 JavaScript 引擎。

然后安装 node.js

当我在 /opt/node 上输入make时,会显示如下错误消息:

make -C out BUILDTYPE=Release V=1 make[1]: Entering directory /share/HDA_DATA/.qpkg/Optware/node/out' flock /share/HDA_DATA/.qpkg/Optware/node/out/Release/linker.lock g++ -pthread -rdynamic -o /share/HDA_DATA/.qpkg/Optware/node/out/Release/mksnapshot -Wl,--start-group /share/HDA_DATA/.qpkg/Optware/node/out/Release/obj.target/mksnapshot/deps/v8/src/mksnapshot.o /share/HDA_DATA/.qpkg/Optware/node/out/Release/obj.target/deps/v8/tools/gyp/libv8_base.a /share/HDA_DATA/.qpkg/Optware/node/out/Release/obj.target/deps/v8/tools/gyp/libv8_nosnapshot.a -Wl,--end-group make[1]: flock: Command not found make[1]: *** [/share/HDA_DATA/.qpkg/Optware/node/out/Release/mksnapshot] Error 127 make[1]: Leaving directory/share/HDA_DATA/.qpkg/Optware/node/out' make: * [node] Error 2

QNAP NAS(TS-119P2) 没有flock 命令行,怎么办?有人可以帮我吗?