问题标签 [posix-api]

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 回答
187 浏览

c - 使用 regexec 时进行分组

我有一个输入字符串,如051916.000. 我想隔离05,19和. 我正在尝试以这种方式在 C 语言中使用。16000regexec

但这似乎不起作用。下面是 GDB 输出

我在 Python 中使用过正则表达式。我是 C 中正则表达式的新手。所以我不确定我哪里出错了。正则表达式经过验证,并且匹配正确。

0 投票
0 回答
41 浏览

multithreading - 是否有任何情况下永远写入域套接字块?

我有一个多进程项目,我使用域套接字作为 IPC 方法。

例如,进程A有多个线程,它们调用'write'函数将数据发送给进程B。(所有域套接字函数都受信号量保护。)当系统繁忙时,一个线程被阻塞'写',它根本没有发布。我检查了进程B,没有问题,它仍然调用'select'和'read'函数,几乎没有时间损失。(至少 10 毫秒,根据滴答声。)

除了接收者不读取数据之外,域套接字块中是否存在“写入”功能?我检查了过程B - 接收部分完全没有问题。它在没有任何阻塞情况的情况下工作。调用'write'的线程数约为5~6个,并且它们调用'write'的频率很高。(某些情况下,每 1 秒 100~200 次。)

我的项目是基于 MIPS 的嵌入式 linux 系统。工具链使用的是 uclibc,所以它可能与基于 PC 的 linux 系统不同。

0 投票
2 回答
819 浏览

c - Deadlock using named semaphore

i'm trying my first run with shared memory and named semaphore to sync access to it.

My program had 3 processes - Parent one, and two childs, all must use the same shared memory. in order to sync between them, i'm using named sempahore. the resource which they share is a 3 integers array, when array[0] - exit flag location, which the child process read before they operate in order to determine if parent process wants to exit. array[1], array[2] - are used to communicate with parent process , each process places a message in his own array cell, and the parent process reads it, and places an ACK message in respone.

I'm trying to get a basic work flow of my code - make all necessary resources, make parent sleep for 3 seconds, and then initiate the exit_procedure.

My problem is, when getting to the exit_procedure, the main process blocks forever on sem_wait() operation - apparently deadlock. I'm trying to figure out the problem and can't seem to pin point it. I'm new to process synchronization - until this code i've synced threads only.

UPDATE: I've switched using POSIX memory mapping, and now i've got the same deadlock issue. relevant methods in process_api.h can't get a hold of the lock, they just block forever. i don't know what am i doing wrong. Can some please assist?

My code:

main file:

process handler:

Can someone please explain what am i'm doing wrong?

I've tried:

  1. passing sem_t pointer from main process as *sem_t **semaphore_p* to processes_init method, and have every child use the real pointer to the semaphore (Even if child will copy the pointer upon COW mecanishm, he'll still use the actual addres Thanks

  2. Declaring the sem_t pointer as extern in the process handler

  3. Opening each child process (in the main_loop method) a "copy" of the named semaphore using sem_open("/shsemaphore", O_RDWR)

None of these worked. i'm going crazy over here guys, please help me :(

0 投票
1 回答
1485 浏览

ios - iOS上数组的Swift金属并行求和计算

基于@Kametrixom 的回答,我做了一些测试应用程序,用于并行计算数组中的总和。

我的测试应用程序如下所示:

我有一个看起来像这样的着色器:

令我惊讶的是,功能sumParallel4是最快的,我认为它不应该是。我注意到当我调用函数 sumParralel和时sumParallel3,即使我改变函数的顺序,第一个函数总是更慢。(因此,如果我先调用 sumParralel,这会更慢,如果我调用 sumParallel3,则会更慢。)。

为什么是这样?为什么 sumParallel3 不比 sumParallel 快很多?为什么 sumParallel4 是最快的,虽然它是在 CPU 上计算的?


如何更新我的 GPU 功能posix_memalign?我知道它应该工作得更快,因为它会在 GPU 和 CPU 之间共享内存,但我不知道应该以这种方式分配女巫数组(数据或结果)以及如果数据是函数中传递的参数,我如何使用 posix_memalign 分配数据?

0 投票
1 回答
55 浏览

c++ - 使用 C++ 在当前运行的进程中获取 X 显示变量

我有几个进程,每个进程都控制着三个监视器。我目前在我的程序中使用 POSIX 操作系统 APIgethostname() 链接来获取当前正在运行的进程的名称。

我还希望能够知道进程正在运行哪个 X 显示器,例如获取屏幕名称,但最好获取显示变量 DISPLAY=0:0DISAPLY=0:1. 试图查找 POSIX API,但似乎没有找到任何有助于解决我的问题的东西。有任何想法吗?

0 投票
3 回答
220 浏览

bash - shell如何保留命令文件输入行边界?

SUSv4 2016版中sh的STDIN的描述说

它不应以这样一种方式进行预读,即被调用的命令打算读取的任何字符都被 shell 消耗

我做了一个实验,通过将以下脚本文件重定向到sh -s

它不断打印出“echo 1234-1234”。(如果 shell 消耗了整个文件块,它只会打印出“1234-1234”)

很明显,shell(至少是我的)确实在行边界处读取。

但是,当我检查 FreeBSD ash "input.c" 源代码时,它读取的是 BUFSIZ 字节块,我不明白它是如何保留行边界的。

我想知道的是:当它们的源代码明显显示它们以块的形式读取时,shell 如何保留行边界?

0 投票
1 回答
4906 浏览

types - timer_t 的基础是什么?

Gcc 并printf说这timer_t是指针(在我的linux)。但是这个指针放置了什么,并且是NULL一个有效的计时器ID?

另外,它是特定于平台的东西,例如它是指针 on linux, int on macOs,……。其他上BSD

0 投票
2 回答
66 浏览

linux - 如何使用 _FILE_OFFSET_BITS 64 编译的应用程序创建一个小文件(大小 <= 2GB)文件?

当应用程序使用 _FILE_OFFSET_BITS 64 功能测试宏编译时,所有旧的 32 位接口系统调用(如 creat/open/lseek 等)都将替换为新的 64 位接口系统调用(如 creat64/open64/lseek64、 ETC)。因此,我的应用程序中的 creat() 调用创建了一个大文件(大小 > 2GB)。但是,是否可以使用使用 _FILE_OFFSET_BITS 64 编译的相同应用程序创建小文件(大小 <= 2GB)?

0 投票
1 回答
30 浏览

linux - 如何找出 POSIX API 在 Linux 中调用的系统调用?

我知道它可能会调用一个或多个系统调用来在 Linux 中实现 POSIX API,但是如何找出将为特定的 POSIX API(例如memcpy或任何其他 POSIX API)调用哪些系统调用?

0 投票
4 回答
260 浏览

c - POSIX API 和 SOLID 设计原则

虽然 SOLID 设计原则主要应用于面向对象的系统,但也有一些 SOLID 概念可以应用于过程式编程,例如 SRP 或 DIP。但是当我研究 POSIX API 中可用的一些函数时,我注意到有些原则没有得到尊重,即使它可能是这样。

我将以SRP和系统调用sigaction为例:

  • SRP指出,在我们的例子中,一个函数必须有一个单一的职责,这意味着我们系统规范的单个部分的变化是可能改变函数规范的一件事。
  • sigaction是一个系统调用,用于更改进程在接收到信号时所采取的操作。

sigaction可用于安装以下形式的基本处理程序:

这意味着处理程序仅接收信号的编号以执行其操作。系统调用也可用于安装以下形式的处理程序:

这让我们获得了有关处理信号的更多信息。由于调用者放置了标志,两种形式都安装了相同的系统调用。

在我看来,sigaction违反了SRP原则,因为它有责任实现这两种类型的处理程序安装。

所以我的问题是:POSIX API 是否违反了 SOLID 原则,如果是,为什么?