标签: posix

如何检索C/Linux上的处理器数量?

我正在编写一个小型C应用程序,它使用一些线程来处理数据.我希望能够知道某台机器上的处理器数量,而不使用system()和小脚本.

我能想到的唯一方法是解析/ proc/cpuinfo.任何其他有用的建议?

c parallel-processing posix

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

检查close()错误的原因是什么?

注意:请在将此标记为重复之前阅读结尾.虽然它很相似,但我在答案中寻找的范围超出了之前的问题所要求的范围.

我倾向于认同的广泛实践往往close纯粹作为文件描述符的资源释放函数而不是具有有意义的失败案例的潜在IO操作.事实上,在解决问题529之前,POSIX在错误之后离开了文件描述符的状态(即它是否仍然被分配)未指定,使得无法以任何有意义的方式对错误进行可移植的响应.

然而,很多GNU软件都花了很大的力气来检查错误close,并且Linux手册页面的close调用失败了"这是一个常见的但仍然很严重的编程错误".NFS和配额被引用作为close可能产生错误但不提供细节的情况.

close在现实世界的系统中,哪些情况可能会失败?它们今天是否相关?我特别感兴趣的是知道是否有任何现代系统close因任何非NFS,非设备节点特定的原因而失败,以及对于NFS或与设备相关的故障,在什么条件下(例如配置)它们可能是看到.

c linux posix

15
推荐指数
2
解决办法
1962
查看次数

检查errno!= EINTR:这是什么意思?

我发现这段代码多次使用(也是类似的代码,open()而不是使用它write()).

int c = write(fd, &v, sizeof(v));
if (c == -1 && errno != EINTR) {
    perror("Write to output file");
    exit(EXIT_FAILURE);
}
Run Code Online (Sandbox Code Playgroud)

为什么要检查&& errno != EINTR这里?

寻找errno男人,我发现关于下面的文字EINTR,但即使我参观man 7 signal不赐教.

EINTR中断函数调用(POSIX.1); 见信号(7).

c linux posix signals linux-kernel

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

使用POSIX消息队列而不是TCP套接字 - 如何建立"连接"?

我有客户端和服务器程序,现在通过TCP进行通信.我正在尝试使用POSIX消息队列(当然,在客户端和服务器位于同一台机器上的情况下).我希望它能提高性能(特别是通过减少延迟).

我已经解决了大部分问题,但我不确定一件事:如何建立"连接".服务器同时接受来自多个客户端的连接,所以我很想模仿TCP连接建立过程,如下所示:

  1. 服务器打开一个具有已知名称的队列并连续读取它(它可以select(2)像TCP一样使用).
  2. 客户端打开三个队列:两个具有任意名称(包括一些唯一性,例如PID以避免冲突),以及一个具有服务器使用的已知名称的队列.
  3. 客户端向服务器的队列发送"连接"消息,包括客户端的队列名称(一个用于客户端到服务器的流量,另一个用于反向).
  4. 服务器打开客户端连接消息中指定的队列,并开始从客户端到服务器读取(选择).
  5. 客户端使用众所周知的名称关闭服务器队列.使用客户端命名的两个队列(每个方向一个)进行双向通信.

您可能会看到此方案与常见的TCP方法类似,这并非偶然.但是,我想知道:

  1. 你能想到一个更好的方法吗?
  2. 你看到我的方法有任何潜在的问题吗?
  3. 您是否有任何其他想法,包括在同一台计算机上使用消息队列而不是TCP实际上可以提高性能(延迟)的可能性?

请记住,之前我没有使用POSIX消息队列(我之前使用过的是IBM WebSphere MQ,但这有点不同).该平台是Linux.

c connection posix client-server message-queue

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

是否有Unix函数的Java库?

我要寻找一个Java库与标准的Unix功能,即对接stat(),getpwuid(),readlink().

这曾经存在,并被称为javaunix.它于2000年发布.见本公告.但是项目页面现在已经消失了.

今天Java中这些类型的函数是否有任何现代替代品?可以让系统调用/bin/ls -l并解析输出,或编写自定义JNI方法,但这些方法比简单地使用旧javaunix库更有用.

澄清 -为了从C程序中找出文件的所有者,它应该调用stat()哪个给出所有者的UID,然后用来getpwuid()从UID获取帐户的名称.在Java中,这可以通过自定义JNI方法或javaunix使用JNI 的库来完成.

java unix java-native-interface posix

14
推荐指数
1
解决办法
5936
查看次数

Microsoft Windows的7 POSIX实现目前在哪里?

Windows 7中是否有可用的完整POSIX实现(我在考虑Windows Services for UNIX)?

它是否适用于每个版本的操作系统(似乎没有)?

它如何在以前的MS Windows POSIX实现中添加/改进或中断?

在哪里可以找到有关Windows 7中有关POSIX合规性的特定Microsoft方法和实现的更多信息?

windows posix windows-7 posix-api

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

如何在不改变任何引脚的情况下在linux中打开串口?

Posix需要在端口打开时更改RTS引脚.我想要一种避免它的方法.

linux posix serial-port

14
推荐指数
2
解决办法
1524
查看次数

Linux 3.0:使用管道stdin/stdout执行子进程

在Linux 3.0/C++下:

我想要一个执行以下操作的函数:

string f(string s)
{
    string r = system("foo < s");
    return r;
}
Run Code Online (Sandbox Code Playgroud)

显然上面的方法不起作用,但你明白了.我有一个字符串s,我想传递作为应用程序"foo"的子进程执行的标准输入,然后我想将其标准输出记录到字符串r然后返回它.

我应该使用linux系统调用或posix函数的组合?

c c++ linux posix glibc

14
推荐指数
1
解决办法
3万
查看次数

Android POSIX兼容吗?

Android POSIX兼容吗?我知道它使用Linux内核,但我不知道这意味着它是POSIX兼容的,随着越来越多的用户空间与功能POSIX标准的交易.那么,它兼容吗?

例如,如果我在C程序中仅使用ANSI和POSIX函数,它是否可以在Android上编译和运行而无需进行任何代码更改?

c android posix

14
推荐指数
3
解决办法
7777
查看次数

bash是否在$ {var + ...}内错误地进行了"$ @"扩展?

我目前通过3个炮弹得到2个意见:

$ bash -c 'set bar; set foo${1+ "$@"}; echo "$# $*"'
1 foobar

$ ash -c 'set bar; set foo${1+ "$@"}; echo "$# $*"'
2 foo bar

$ dash -c 'set bar; set foo${1+ "$@"}; echo "$# $*"'
2 foo bar
Run Code Online (Sandbox Code Playgroud)

或者我忽略了一些POSIX定义,它将我的示例呈现为实现定义的行为?

请注意,只有"$ @"似乎会触发差异.以下所有3个shell的工作方式相同:

$ bash -c 'set bar; set foo${1+ $*}; echo "$# $*"'
2 foo bar

$ ash -c 'set bar; set foo${1+ $*}; echo "$# $*"'
2 foo bar

$ dash -c 'set bar; set foo${1+ …
Run Code Online (Sandbox Code Playgroud)

bash shell scripting posix expansion

14
推荐指数
1
解决办法
296
查看次数