问题标签 [posix]

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

c - C : POSIX 线程库测试套件

我正在开发一个实现用户级线程的线程库(我有类似 pthread_setscope 的东西)并且我正在寻找一组测试以避免为我实现的每个函数(互斥锁、条件等)编写一个测试...... )

有谁知道这样的事情?

0 投票
4 回答
11183 浏览

c - 如果您在单独的线程中关闭(2)文件描述符,select(2)会做什么?

select(2)当它正在监视读取的文件描述符被另一个线程关闭时,该函数的行为是什么?

通过一些粗略的测试,它确实会立即返回。我怀疑结果是(a)它仍然继续等待数据,但如果你真的试图从中读取,你会得到 EBADF(可能 - 存在潜在的竞争)或(b)它假装好像文件描述符从未传入。如果后一种情况为真,则传入一个没有超时的 fd 如果它被关闭将导致死锁。

0 投票
7 回答
8412 浏览

c - 有什么普通的理由使用 open() 而不是 fopen()?

经过很长一段时间后,我正在用 C 语言做一个小项目。这些恰好包括一些文件处理。我在各种文档中注意到,有些函数返回FILE *句柄,有些函数返回(小整数)描述符。两组功能都提供了我需要的相同基本服务,所以我使用它真的没关系。

但我很好奇收藏智慧:是用fopen()和朋友更好,还是open()和朋友更好?

编辑由于有人提到缓冲与非缓冲和访问设备,我应该补充一点,这个小项目的一部分将在 FUSE 下编写用户空间文件系统驱动程序。因此,文件级别的访问可以像在“文件”(即图像)上一样容易地在设备(例如 CDROM 或 SCSI 驱动器)上进行。

0 投票
2 回答
1105 浏览

c++ - pselect() 无法识别具有任何 IO 活动的套接字

以下面的代码片段为例,创建套接字、侦听和接受新套接字都可以正常工作。非阻塞模式也可以工作,但是 pselect(甚至用 select 替换)没有识别 FDset 上准备好的任何 IO 请求。所以返回值总是0(超时)。

我想知道在进入 pselect() 之前是否需要进一步设置任何其他内容,以便它识别 IO 活动。

0 投票
1 回答
3790 浏览

linux - 异步套接字连接如何报告错误?

我正在异步连接一个套接字(O_NONBLOCK + connect)。POSIX 标准规定,在连接套接字后,应该通过使套接字的文件描述符准备好写入来发出事件信号。它似乎没有说明异步连接期间的失败。

在 Linux 上对其进行测试时,在这种情况下,有时我会得到 POLLOUT,有时会出现 POLLERR。行为中有什么模式吗?我可以让它以单一方式报告错误吗?POSIX 是否说了我忽略的内容?

0 投票
3 回答
2066 浏览

c++ - c++中的Posix线程

如何在linux c++中实现posix线程。保存为“.c并使用c编译器运行的smme程序是可以的。但是在c++中它给出了错误..

我认为我在编译时犯了错误,是否包含任何标签,例如 c++ 的“-lpthread”

有人可以发送一个有效的代码...?

其实这是我的代码

我得到的错误是

0 投票
1 回答
1889 浏览

ipc - 在 posix 的命名管道上让许多进程写入单个读取器是否会产生影响?

我正在为 POSIX (OSX) 编写一个程序,其中我将有许多进程向一个侦听器发送消息,该侦听器本质上是一个日志记录线程。所有进程都在单独的程序中运行,并且使用许多进程写入但只有一个进程读取的单个命名管道 (FIFO) 非常诱人。

问题:

1)这会工作吗?- 我可以使用 bash 设置一个具有多个写入它的进程的 fifo 来完成这项工作,所以我知道理论上这是可行的。但在实践中,有没有我在掩饰的问题?

外壳 #1

贝壳 #2 和 #3

2)如果每个作者只写相对较短的消息(< 100 字节?),那么我可以假设每个对 write() 的调用都会完整地发送给读者吗?或者,一条消息的一半是否会与来自不同作者的另一条消息的一半存在混淆?

感谢您的任何建议。

0 投票
3 回答
1275 浏览

macos - 在命名管道(FIFO)上使用 poll() 时,看起来 OS X 确实存在错误......专家可以确认吗?

我一直在尝试从一组命名管道中进行轮询一段时间,并且我不断收到 POLLNVAL 对任何命名管道文件描述符的即时响应。在找到这篇关于 OS X 中的错误轮询的博客文章后,我很确定这是 OS X 中的一个错误。

我已经计划将我的代码切换为使用 UDP 套接字,但我想要求 SO 对此进行验证 a) 以便我确定它真的坏了,并且 b) 用于文档目的。

这是我编写的代码的精简版本(尽管上面链接中的代码经过我测试,拼写得很好):

这输出:

令人作呕。

还有其他人遇到这个吗?这是一个真正的错误,对吧?

0 投票
3 回答
11830 浏览

c - glibc 的 fprintf() 实现是线程安全的吗?

fprintf 线程安全吗? glibc 手册似乎是这样说的,但是我的应用程序使用对 fprintf() 的单次调用写入文件似乎混合了来自不同进程的部分写入。

编辑:为了澄清,有问题的程序是一个lighttpd插件,并且服务器正在运行多个工作线程。

查看文件,一些写入是混合在一起的。

编辑2:看来我看到的问题可能是由于lighttpd的“工作线程”实际上是单独的进程:http://redmine.lighttpd.net/wiki/lighttpd/Docs:MultiProcessor

问题

通过在同一个套接字上运行 2 个或更多进程,您将获得更好的并发性,但您必须注意一些缺点:

  • mod_accesslog 可能会创建损坏的访问日志,因为同一个文件被打开两次并且不同步。
  • mod_status 将有n 个单独的计数器,每个进程一组。
  • mod_rrdtool 将失败,因为它两次接收到相同的时间戳。
  • mod_uploadprogress 不会显示正确的状态。
0 投票
5 回答
251 浏览

c - 将数据提供给需要文件名的 C API

我正在 Linux 上编写一个简单的 C 程序,并希望使用现有库的 API,该 API 需要来自文件的数据。我必须将文件名作为 const char* 提供给它。但是我有数据,就像文件的内容一样,已经位于堆上分配的缓冲区中。有大量的 RAM,我们想要高性能。想要避免将临时文件写入磁盘,以看起来像文件的方式将数据提供给此 API 的好方法是什么?

这是我的代码的廉价假装版本:

奇妙图书馆.h:

normal-persons-usage.cpp,最初为其设计的库:

我的程序.cpp:

需要明确的是,marvelouslibrary 不提供任何通过指针接受数据的 API 函数。它只能读取一个文件。

我想到了管道和 mkfifo(),但似乎是为了在进程之间进行通信。我不是这些事情的专家。命名管道是否可以在同一进程中读取和写入?这是明智的做法吗?

或者跳过聪明,使用计划“B”,即shddup并只写一个临时文件。但是,除了获得高性能之外,我想学习一些新东西并找出在这种情况下可能发生的事情。