问题标签 [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 回答
125 浏览

java - Linux JVM上对象的内在锁

我了解到:“每个对象都有一个与之关联的内在锁。”

我还了解到,在 linux 上,JVM 内部使用 POSIX api 的多线程功能。

JVM 用来为类的每个对象实例提供(创建)内在锁的 POSIX api 的名称是什么?

0 投票
2 回答
1622 浏览

c++ - 如何让 poll() 在 Linux 上的 C 中立即退出?

我在我的 C++ 类中使用函数poll()(我认为它可能是 POSIX 的一部分?)C 函数,以便在文件更改时获取事件。这似乎工作得很好 - 但现在我也希望能够在我需要关闭线程时立即退出函数。

我对此进行了研究,并提出了一些我尝试过的想法——比如尝试发送信号,但我不知道如何让它发挥作用。

在下面的代码中(不是 100% 完整,但应该足以说明问题),我有一个 C++ 类,它从构造函数启动一个线程并希望在析构函数中清理该线程。线程调用poll()当文件更改时返回,然后通知委托对象。监视线程循环直到FileMonitor对象指示它可以退出(使用返回布尔值的方法)。

在析构函数中,我想做的是翻转 bool,然后做一些导致poll()立即退出的事情,然后调用 *pthread_join()*。那么,关于如何让poll()立即退出的任何想法?

此代码针对 Linux(特别是 debian),但我也在 Mac 上处理它。理想情况下,poll() API 应该基本相同。

0 投票
1 回答
195 浏览

c++ - POSIX_SPAWN 失败

上面的代码创建了 2 个子进程,每个进程都应该执行 t.cpp,这是一个简单的 c++ hello world 代码。但它不执行它。事实上,这段代码甚至不需要创建 t.cpp 就可以工作。谁能解释为什么会发生这种情况以及如何执行 t1.cpp?

0 投票
2 回答
1748 浏览

c - perror 线程安全吗?

我知道 errno 是线程安全的。而在 Linux 中,还有另外 2 个类似的函数,即 strerror 和 strerror_r。根据Linux System ProgrammingRobert Lover 的书,strerror 不是线程安全的,但 strerror_r 是。所以我想知道 perror 是否是线程安全的。

0 投票
1 回答
346 浏览

c++ - read() 返回在某些系统上读取的错误字节数

我正在尝试解决遗留系统中的文件读取问题。

这是一个 32 位 Windows 应用程序,仅在安装了相同 SP、SDK 和 IDE 的 Windows7/SP1/64 位系统上测试和运行。IDE是VS2010/SP1。

这是有问题的代码:

如您所见,它应该是一个普通的、旧的直接二进制读入某些结构。我可以观察到的是,当我创建文件并首先使用 memset/Zeromem 清除结构以“初始化”所有填充字节时使用 0x00 而不是 0xCC(这是微软在调试模式下将 mem 标记为未初始化的方式stack mem) 问题在之前没有正确运行的系统上消失了。

虽然我似乎很清楚如何“正确”解决问题 - 在 open() 中指定 O_BINARY 就像

我不知道为什么这会表现得如此不同。我试图在两个系统上逐步检查 open() 和 read() 的来源,但由于我很少能够访问唯一可以重现问题的系统,所以我还没有找到任何东西。

因此,我的问题是是否有人可以指出为什么会发生这种情况并参考一些文档。

0 投票
2 回答
487 浏览

c - 使用不同的根目录启动一个单独的进程,而无需分叉/克隆它

就我而言,我需要每天从一个单独的文件系统启动一个进程,它的根目录位于一个子目录中。因为它是文件系统上唯一需要卸载它的东西。
另一个问题是我不能fork()/clone()该进程,因为它在特权环内运行。

我想到了以下解决方案:

如果不执行该过程,这样的事情也不会起作用。

那么如何在不改变父进程的情况下启动具有不同根目录的不同子进程呢?

0 投票
1 回答
1603 浏览

c - FreeBSD:定义了 _POSIX_C_SOURCE=200809L 的 getpagesize 的隐式声明。

我目前正在将软件项目的一些与操作系统相关的功能从 Linux 移植到 FreeBSD。getpagesize因此,我认识到使用if _POSIX_C_SOURCE=200809L在 FreeBSD 10.1 上定义的以下问题。

我创建了一个小测试程序

如果我编译正在使用

它编译时没有任何警告。但是,如果我定义_POSIX_C_SOURCE=200809L(我在代码的其他部分需要的正确 POSIXgetline函数定义的结果)我得到:

尽管我unistd.h按照getpagesize. 如何在仍然定义的情况下使代码编译没有警告_POSIX_C_SOURCE

0 投票
0 回答
903 浏览

ios - iOS opendir("/Library") 不允许操作

目录的权限如下:

opendir("/Applications") 运行良好 opendir("/Library") 不允许 opendir("/private") 操作不允许操作

运行时环境:iOS 设备 7.7/9.2 + xcode 7.2 和调试消息用于print()在控制台中打印,但在使用 iOS 模拟器而不是 iOS 设备时效果很好

我尝试通过使用and来获取线程的用户,它告诉了移动移动的结果getpwuid(getuid())getgrgid(getgid())

问题是: 1.使用iOS设备,相同的权限,相同的用户和相同的组,为什么“/Applications”可以正常工作而“/Library”在Operation not allowed的情况下工作? 2.当使用iOS模拟器代替iOS设备时,这三个目录可以用opendir()???

谢谢你的好意!!!

0 投票
1 回答
136 浏览

c - 计时器在一段时间后冻结

我正在运行以下实现计时器的程序。当线程从前一个运行线程接收到条件变量信号后唤醒时,它会创建一个计时器并在计时器到期时向下一个线程发送信号。我希望它运行一段时间,但定时器在运行一段时间后停止滴答作响。

虽然没有执行 printf 语句,但为什么一段时间后它会冻结?如果不。的计时器是有限的,我应该使用什么其他策略来解决这个问题?

0 投票
1 回答
2883 浏览

c - 根据 POSIX 标准,在同一个套接字上对发送/接收的并行调用是否有效?

我正在尝试了解并行线程上套接字 API(recvsendselectclose等)的使用。这意味着在两个并行线程上使用一个套接字文件描述符。我已经解决了这个问题。但是我仍然找不到任何标准文档来解释多线程中套接字 API 的使用。甚至opengroup手册页也没有说明这一点。

我还想知道下面列出的并行线程使用场景在 POSIX 套接字 API 中是否有效

1)在两个并行线程中调用recvsend

2)在两个并行线程中调用recvand sendwithselect

3 )在两个并行线程中调用recvand send, setsockopt,ioctlfcntl