POSIX(可移植操作系统接口)是一组标准,用于定义编程API,命令解释器以及类Unix操作系统的通用实用程序。
我在SO和Google上查了这个问题,几乎每次有人问这个问题时,答案似乎都是“不”,你必须竭尽全力确保孩子们足月……
我是 POSIX 世界的新手,我试图了解 fork 系统调用在 C 中的工作原理,特别是它如何在父级到子级之间复制文件描述符和缓冲区。具体是这两种情况: ...
为什么 POSIX C 共享内存 IPC API 需要多个地方的权限(读/写)?
我正在尝试在 C 中使用 POSIX 共享内存 IPC API,它基本上遵循 shm_open() -> ftruncate() -> mmap() -> use -> munmap() -> shm_unlink() 模式(后两者是
我正在尝试实现一个 awk 函数,用于将字符串拆分为数组;与内置分割的主要区别在于,人们将能够限制“分割”的数量......
我想改变这个: 目录1 文件01 目录1 文件02 目录1 文件03 目录2 文件04 目录2 文件05 目录3 文件06 目录4 文件07 目录4 文件08 目录4 文件09 目录4 文件10 分为以下内容: 目录1 文件01 文件02 文件03 目录2
我有一个用于截图的脚本。它在后台运行 maim,并提供比仅运行命令本身更方便的界面(更少输入,更简单,助记
在Linux(POSIX)中,如何在检查内容时将stdin转发到分叉子进程?
我正在开发一个命令行应用程序来劫持 ls 或 cat 等 CLI 工具的调用。我需要检查和分析传递给他们的原始标准输入内容。不过我发现还不错
在 Rust 中调用使用 dlopen() 获得的函数指针时出现段错误
我目前正在使用 Rust 使用 dlfcn.h 中定义的 POSIX 函数,目的是调用单独的 .so 文件中的函数。 该项目实际上包含 2 个 crate: 二进制文件加载
我在尝试使用 mq_open() 调用创建 posix mq 时遇到权限问题。我确实合并了此处提到的更改 mq_open 权限被拒绝 我查看了其他相关帖子,例如
C 的正则表达式库中是否有像 python 中那样的 findall 函数: re.findall(模式, input_string) 我有一个包含文件名的字符串,如下所示:“path/to/file1.ics,path/file2.ics”,带有
Linux 上使用默认 (SCHED_OTHER) 调度策略的每线程调度优先级
我正在尝试实现一个跨平台包装器来调整当前线程优先级;在 POSIX 上,“正确”的事情看起来像 /// 设置当前t的优先级调整...
我正在尝试运行 mq_notify 手册页中找到的 POSIX 消息队列示例程序。我将其作为 ./mq '/bla' 运行,它给出了错误 mq_open: Invalid argument。 这是我...
涉及 pthreads 的最琐碎的 C 程序中出现奇怪的零星错误
下面是一个简单程序的 C 源代码。 该程序有一个主循环,要求用户在 3 个选项之间进行选择: 1-打印一些文本 2-做一些工作(没有副作用) 3-退出...
我开始学习在C中使用Posix消息队列。(我的主机是Kubuntu 22.04) 我正在尝试编写一个程序,该程序启动指定数量的正在等待消息的线程(消息= ...
为什么 macOS 上的 FIFO 管道比匿名管道慢约 8 倍?
在 M1 Max 上,我使用 mkfifo 创建了一个 FIFO 命名管道,并使用简单的 C 程序和 pv 测试写入/读取性能。该程序一次向 stdout 写入 65536 个字节。当做 ./wri...
我正在尝试理解信号量的语义。 这是一些代码: #包括 #包括 #包括 #包括 #包括 我正在尝试理解信号量的语义。 这是一些代码: #include <semaphore.h> #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> sem_t sem; void *helper(void *arg) { sem_wait(&sem); printf("helper woke up\n"); } int main() { sem_init(&sem, 0, 0); pthread_t tid; pthread_create(&tid, NULL, helper, NULL); sleep(1); sem_post(&sem); sem_wait(&sem); printf("main woke up\n"); exit(0); } 这里 main 创建一个辅助线程,休眠一秒钟以(几乎)确定辅助线程已运行并等待信号量,然后尝试快速连续地发布并等待信号量。根据 POSIX (https://pubs.opengroup.org/onlinepubs/009695399/functions/sem_post.html): 如果此操作产生的信号量值为零,则应允许阻塞等待信号量的线程之一从其对 sem_wait() 的调用中成功返回。 所以,我希望打印“助手醒来”。但是,如果您实际上在 Linux 上运行此代码,通常会观察到“main 唤醒”,这意味着默认情况下 Linux 上的信号量是允许不公平的。 我的问题是:为什么允许这种行为?是的,你可以说“它更容易实现”,但这并不能解释为什么信号量是用这些特定的语义设计的。 在其他地方,(https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html)它表示这种行为在某些情况下更可取。在什么情况下非公平信号量更好?我将不胜感激有关此主题的任何详细资料。 这样做的一个更好的方法是它减少了上下文切换。允许调用 sem_post() 的线程继续运行,而不必恢复在 sem_wait() 中阻塞的线程。 当调度程序决定解除哪个线程的阻塞时,主线程已调用 sem_wait()。然后它选择要解除封锁的服务员。然后,它可以根据调度优先级(如引用段落的其余部分所述)或任意选择。并且它可能会选择主线程以避免上下文切换。
linux bash -> sed(正则表达式)。如何将所有出现的定义部分替换为“source_dir”和“target_dir”到source_dir部分中的内容
例如我有这样的文字: <<<<<<<<< <> 测试 <<<<<<<<< <> 测试23442141 <<<<<&...
我正在尝试创建一个线程来从套接字描述符中读取。我需要使用非阻塞循环来检查当前时间并在会话结束后关闭套接字,但 FD_ISSET 返回 0
此代码使用 C 语言实现了一个简单的客户端-服务器通信系统。 本地.h #包括 #包括 #include“sys/ipc.h” #包括<...
定义 _POSIX_C_SOURCE 时,在 MacOS 上编译失败并出现奇怪的错误
具有以下编译器标志: -std=c11 -Werror -Wpedantic Oracle Solaris 14.6 要求为 Clock_gettime() 的声明定义 _POSIX_C_SOURCE/_XOPEN_SOURCE,该函数使用...