我需要比较shell中的字符串:
var1="mtu eth0"
if [ "$var1" == "mtu *" ]
then
# do something
fi
Run Code Online (Sandbox Code Playgroud)
但显然"*"在壳牌中不起作用.有办法吗?
在POSIX OS下,有一个信号API,它允许发送一个信号进行处理以使用kill来关闭它,你可以用sigaction捕获它并做你需要的事情;
但是,Win32不是POSIX系统,因此:
我不是在谈论GUI,我在谈论应该很好地关闭的TCP/IP服务器.这不像Windows服务那样运行.
我正在阅读GNU find的手册页并绊倒这个开关:
-regextype type
Changes the regular expression syntax understood by -regex and
-iregex tests which occur later on the command line. Currently-
implemented types are emacs (this is the default), posix-awk, posix-
basic, posix-egrep and posix-extended.
Run Code Online (Sandbox Code Playgroud)
这些正则表达式语法之间有什么区别?我对Ruby的正则表达式更熟悉,那么我应该使用什么类型的正则表达式find?
我找到了关于pthreads 的以下主题(这里),但有很多很好的解决方案.
我想知道以下代码是否有效,如果是,为什么使用相同的锁来调用pthread_cond_wait以及访问它然后立即解锁:
void suspendMe()
{
pthread_mutex_lock(&m_SuspendMutex);
pthread_cond_wait(&m_ResumeCond, &m_SuspendMutex);
pthread_mutex_unlock(&m_SuspendMutex);
}
Run Code Online (Sandbox Code Playgroud)
在这里使用2个单独的互斥锁不是更好吗,或者这是暂停pthread的正确方法?
提前致谢!
编辑:
很棒的回复,谢谢大家.还有一个相关的问题.既然我想在另一个函数中单独恢复一个线程,那么恢复它会更合适吗?
void suspendMe()
{
pthread_mutex_lock(&m_SuspendMutex);
pthread_cond_wait(&m_ResumeCond, &m_SuspendMutex);
}
void resumeMe()
{
pthread_cond_signal(&m_ResumeCond);
pthread_mutex_unlock(&m_SuspendMutex);
}
Run Code Online (Sandbox Code Playgroud)
再次感谢大家!:〜)
有哪些方法可用于专门打开设备文件(例如,显示帧缓冲区)?
[信息:我已经知道了flock()和朋友,只有在其他应用程序也在使用它时才会产生效果(换句话说:open()会成功但flock()如果已经锁定则会失败) - >但是仍然可以使用从open()检索到的设备句柄来写入显示...
当我想在设备文件上强制执行这种独占访问时,情况怎么样?如何实施这样的执法?
提前致谢!
展望现在通过一些OS功能我觉得在POSIX系统中,您有C函数调用想unlink()删除文件,link()创建硬链接的文件,symlink()以创建符号文件,rename()移动文件,但是...这里是一个函数copy()文件?
我知道通常的方法是打开源文件,读取其内容,打开目标文件并将其转储到那里.但是为什么我不能在以前的所有功能中找到任何这样的效用函数?
我正在编写一些高度可移植的安全代码.我试图避免实用程序中的安全漏洞,例如在某些版本中找到的这个sudo:
...通过运行
sudo -k然后将系统时钟重置为01-01-1970,可以成为超级用户.
发生这种情况是因为sudo依赖于绝对(即日历)时间来确定访问是否已超时.
我的想法是使用CLOCK_MONOTONIC定义的time.h.
从POSIX标准来看,
[CLOCK_MONOTONIC]被定义为一个时钟,其值不能通过clock_settime()设置,并且不能有后向时钟跳转.最大可能的时钟跳转应由实现定义.
问题是,在许多(大多数?)系统上,CLOCK_MONOTONIC重启时会重置.是否有任何保证 POSIX兼容的方法来确定自程序上次运行以来系统是否已重新启动?
一种(坏)方法是检查存储的时钟值是否大于当前时钟值,但这只会改变问题.在CLOCK_MONOTONIC重新启动时重置的系统上,可能会有一个TIMEOUT允许访问的短窗口.
我错过了什么可以避免这个问题?
在POSIX中,为什么在fcntl.h中声明了开放系统调用,而在unistd.h中声明了close系统调用?我认为这是一件历史性的神器,但这对对我来说特别奇怪,因为你经常需要在打开后关闭.
有谁知道为什么mmap()返回MAP_FAILED而不是NULL?在大多数系统上,似乎MAP_FAILED是(void*) - 1.为什么mmap()不使用NULL代替?我知道地址0x0在技术上是一个有效的内存页面,而(void*) - 1永远不会是一个有效的页面.但我的猜测是mmap()实际上永远不会实际返回页面0x0.例如,在Windows上,VirtualAlloc()在出错时返回NULL.
假设mmap()永远不会返回0x0是否安全?大概是对mmap()的成功调用应该将可用内存返回给调用者.地址0x0永远不可用,因此成功时永远不应返回.这种情况会让使用0x0作为失败的哨兵似乎是明智的,这就是为什么我首先对MAP_FAILED的存在感到困惑.
以下代码片段:
struct timespec ts;
for (int x = 0; x < 100000000; x++) {
timespec_get(&ts, TIME_UTC);
long cTime = (long) time(NULL);
if (cTime != ts.tv_sec && ts.tv_nsec < 3000000) {
printf("cTime: %ld\n", cTime);
printf("ts.tv_sec: %ld\n", ts.tv_sec);
printf("ts.tv_nsec: %ld\n", ts.tv_nsec);
}
}
Run Code Online (Sandbox Code Playgroud)
产生这个输出:
...
cTime: 1579268059
ts.tv_sec: 1579268060
ts.tv_nsec: 2527419
cTime: 1579268059
ts.tv_sec: 1579268060
ts.tv_nsec: 2534036
cTime: 1579268059
ts.tv_sec: 1579268060
ts.tv_nsec: 2540359
cTime: 1579268059
ts.tv_sec: 1579268060
ts.tv_nsec: 2547039
...
Run Code Online (Sandbox Code Playgroud)
为什么之间的差异cTime和ts.tv_sec?请注意,如果条件更改为 ,则不会出现此问题ts.tv_nsec >= 3000000。该问题依赖于小于 3000000 的纳秒。