我似乎遇到了boost :: interprocess :: file_lock的问题
我有基本上的过程1
boost::interprocess::file_lock test_lock("testfile.csv");
test_lock.lock();
sleep(1000);
test_lock.unlock();
Run Code Online (Sandbox Code Playgroud)
当我在第一个进程正在休眠时运行第二个进程时,我发现我仍然能够读取testfile.csv.更糟糕的是,我甚至可以覆盖它.
我是否误解了file_lock的工作原理?我的印象是,调用.lock()会对文件进行独占锁定,并阻止任何其他进程读取/修改文件.
这是经常运行并且必须快速运行的代码,因此我想就最快的实现方式获得一些意见.注意,我实际上需要完整的毫秒分辨率到一定程度的准确度(所以秒*1000是不够的).对于这个项目,使用Boost是可以的.
编辑:目标平台是x64_86 CentOS5,也希望能够依赖OS时钟,所以我也可以在一个没有连续运行的程序中使用它.
我目前正在使用expect来传递密码,因此我的脚本可以自动运行,而不必坐下来并反复输入相同的密码.
重要提示:请不要评论这是多大的安全风险或者我应该如何使用ssh密钥,如果可以的话我会使用那些,但我必须使用的设置不允许它.
我的代码如下所示:
#!/bin/sh
PASS=mypassword
/usr/bin/expect -c "
spawn python Tools/python/install.py
expect -nocase \"password:\" {send \"$PASS\r\"; interact}
"
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是install.py提示输入相同的密码十几次,看来只能自动填写第一个提示的密码.
有没有办法修改行为,使其填写密码所有12次,而不仅仅是第一次?
我想grep文件中的以下字符串:
directory1
directory2
directory3
Run Code Online (Sandbox Code Playgroud)
有没有办法用grep同时grep所有3?
例如:
cat file.txt | grep directory[1-3]
Run Code Online (Sandbox Code Playgroud)
不幸的是,上述方法无效
有没有办法在bash中获得当前毫秒过夜?如果有一种方法可以完全用bash来完成,那么时间戳的精确度有多好或多坏?
我的代码目前执行如下操作:
ofstream fout;
fout.open("file.txt");
fout<<"blah blah "<<100<<","<<3.14;
//get ofstream length here
fout<<"write more stuff"<<endl;
Run Code Online (Sandbox Code Playgroud)
有没有一种方便的方法来找出在我上面指定的阶段写的那条线的长度?(在现实生活中,int 100和float 3.14不是常数并且可以改变).有什么好方法可以做我想要的吗?
编辑:按长度,我的意思是可以使用fseek,例如
fseek(pFile, -linelength, SEEK_END);
Run Code Online (Sandbox Code Playgroud) 通常运行无限bash循环,我执行以下操作:
while true; do
echo test
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
如果相反,我想做一个无限循环的循环,只要它早于20:00.有没有办法在bash中这样做?
我有一个文件格式如下:
First Last UID
First Middle Last UID
Run Code Online (Sandbox Code Playgroud)
基本上,一些名称具有中间名称(有时多于一个中间名称).我只想要一个只作为UID的文件.
是否有可以运行的sed或awk命令在最后一个空格之前删除所有内容?
有多种方法可以检查文件是否存在.
我知道的选项是:
boost::filesystem exists()access()stat()ifstream is_open()有谁知道哪一个能提供最高性能?
编辑:假设在/ dev/shm上运行,其中访问时间不是一个因素.
我有以下功能来获取自今天午夜以来的秒数.
long int midnight_time()
{
time_t t;
struct tm *local;
t = time(NULL);
struct tm timeinfo;
local = localtime(&t);
timeinfo.tm_year = local->tm_year;
timeinfo.tm_mon = local->tm_mon;
timeinfo.tm_mday = local->tm_mday;
timeinfo.tm_hour = 0;
timeinfo.tm_min=0;
timeinfo.tm_sec=0;
long int midnight_epoch = mktime(&timeinfo);
return midnight_epoch;
}
Run Code Online (Sandbox Code Playgroud)
当我在代码中相继调用此函数两次时,例如
cout<<midnight_time()<<endl;
cout<<midnight_time()<<endl;
Run Code Online (Sandbox Code Playgroud)
我一直得到截然不同的结果,例如:1367816400 1367812800
这是差不多4000秒.我希望数字是一样的.谁能看到我做错了什么?