标签: posix

如何比较Bourne Shell中的字符串?

我需要比较shell中的字符串:

var1="mtu eth0"

if [ "$var1" == "mtu *" ]
then
    # do something
fi
Run Code Online (Sandbox Code Playgroud)

但显然"*"在壳牌中不起作用.有办法吗?

shell posix sh

12
推荐指数
3
解决办法
6万
查看次数

Win32 API模拟发送/捕获SIGTERM

在POSIX OS下,有一个信号API,它允许发送一个信号进行处理以使用kill来关闭它,你可以用sigaction捕获它并做你需要的事情;

但是,Win32不是POSIX系统,因此:

  • 如何处理可能出现的关闭事件,例如"任务管理器"中的"结束进程"?
  • 将关闭信号发送到Win32应用程序的标准API是什么?

我不是在谈论GUI,我在谈论应该很好地关闭的TCP/IP服务器.这不像Windows服务那样运行.

windows winapi posix shutdown sigterm

12
推荐指数
2
解决办法
2万
查看次数

正则表达式类型之间的差异

我正在阅读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

regex syntax posix find

12
推荐指数
1
解决办法
8085
查看次数

暂停和恢复pthreads的最佳解决方案是什么?

我找到了关于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)

再次感谢大家!:〜)

c++ posix pthreads

12
推荐指数
1
解决办法
2万
查看次数

在Linux中独占打开设备文件

有哪些方法可用于专门打开设备文件(例如,显示帧缓冲区)?

[信息:我已经知道了flock()和朋友,只有在其他应用程序也在使用它时才会产生效果(换句话说:open()会成功但flock()如果已经锁定则会失败) - >但是仍然可以使用从open()检索到的设备句柄来写入显示...

当我想在设备文件上强制执行这种独占访问时,情况怎么样?如何实施这样的执法?

提前致谢!

c linux posix flock

12
推荐指数
2
解决办法
4328
查看次数

是否有POSIX功能来复制文件?

展望现在通过一些OS功能我觉得在POSIX系统中,您有C函数调用想unlink()删除文件,link()创建硬链接的文件,symlink()以创建符号文件,rename()移动文件,但是...这里是一个函数copy()文件?

我知道通常的方法是打开源文件,读取其内容,打开目标文件并将其转储到那里.但是为什么我不能在以前的所有功能中找到任何这样的效用函数?

c posix

12
推荐指数
2
解决办法
2万
查看次数

POSIX兼容的方式告诉系统是否重启?

我正在编写一些高度可移植的安全代码.我试图避免实用程序中的安全漏洞,例如在某些版本中找到的这个sudo:

...通过运行sudo -k然后将系统时钟重置为01-01-1970,可以成为超级用户.

发生这种情况是因为sudo依赖于绝对(即日历)时间来确定访问是否已超时.

我的想法是使用CLOCK_MONOTONIC定义的time.h.

POSIX标准来看,

[CLOCK_MONOTONIC]被定义为一个时钟,其值不能通过clock_settime()设置,并且不能有后向时钟跳转.最大可能的时钟跳转应由实现定义.

问题是,在许多(大多数?)系统上,CLOCK_MONOTONIC重启时会重置.是否有任何保证 POSIX兼容的方法来确定自程序上次运行以来系统是否已重新启动?

一种(坏)方法是检查存储的时钟值是否大于当前时钟值,但这只会改变问题.在CLOCK_MONOTONIC重新启动时重置的系统上,可能会有一个TIMEOUT允许访问的短窗口.

我错过了什么可以避免这个问题?

security time posix exploit clock

12
推荐指数
1
解决办法
635
查看次数

为什么在fcntl.h中声明open,而在unistd.h中声明close?

在POSIX中,为什么在fcntl.h中声明了开放系统调用,而在unistd.h中声明了close系统调用?我认为这是一件历史性的神器,但这对对我来说特别奇怪,因为你经常需要在打开后关闭.

unix posix

12
推荐指数
1
解决办法
1136
查看次数

为什么mmap()使用MAP_FAILED而不是NULL?

有谁知道为什么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的存在感到困惑.

linux macos posix mmap ios

12
推荐指数
1
解决办法
4924
查看次数

为什么 C 代码中 time() 报告的时间有时比 timespec_get() 的秒部分晚 1 秒?

以下代码片段:

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)

为什么之间的差异cTimets.tv_sec?请注意,如果条件更改为 ,则不会出现此问题ts.tv_nsec >= 3000000。该问题依赖于小于 3000000 的纳秒。

c time posix timespec

12
推荐指数
1
解决办法
145
查看次数

标签 统计

posix ×10

c ×3

linux ×2

time ×2

c++ ×1

clock ×1

exploit ×1

find ×1

flock ×1

ios ×1

macos ×1

mmap ×1

pthreads ×1

regex ×1

security ×1

sh ×1

shell ×1

shutdown ×1

sigterm ×1

syntax ×1

timespec ×1

unix ×1

winapi ×1

windows ×1