问题标签 [systems-programming]
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.
bash - 如何并行运行命令列表?
我有一个包含要运行的命令行的文件。该文件包含大约 2,000 行。
我有 8 个内核可用。是否可以解析文件并启动 8 个进程,然后在其中一个程序完成时从文件中执行另一个进程?我希望这一直持续到文件末尾。
c - 从 C 程序中调用调试器
我正在阅读 David Hanson 的《C 接口和实现》一书。这个练习题似乎很有趣,我无法找到解决方案:
在某些系统上,程序可以在检测到错误时自行调用调试器。这个工具在开发过程中特别有用,因为断言失败可能很常见。
您能否提供一个关于如何调用调试器的简短示例。
c - 如何在 C 代码中模拟动态显示
我编写了一个代码,可以将任何输入整数转换为等效的 LED 显示器。我想将我的系统时间作为输入传递给这个函数并获得一个 LED 显示屏。
示例:考虑这两个输入:
问题:
屏幕输出应该用“11:10:04”覆盖“10:12:00”的先前输出,以便应用程序用户应该获得“就地”动态显示的感觉。
请求您提供一些关于如何在“C”代码中实现这一点的提示。(我的平台是 GNU/Linux)
谢谢。
此致,
桑迪普·辛格
c - 为什么 main() 的缓冲区是本地的,然后无法显式关闭流是一个错误?
我正在学习 linux 系统编程,O'reilly。它说“一个常见的错误是将缓冲区声明为在流关闭之前结束的范围内的自动变量。特别注意不要为 main() 提供本地缓冲区,然后无法显式关闭流。 "
然后它显示了一个错误的代码示例:
我编译并执行代码..并不太明白这种代码会导致什么......请帮助我理解这个概念,谢谢大家。
c++ - 发送大数据时对等方重置 Tcp 连接
我正在尝试通过 tcp 套接字连接发送 212 KB 的缓冲区,但作为响应,我收到了 RST 数据包并且连接因对等错误而重置。
我已将 SO_RCVBUF 和 SO_SBNBUF 属性更改为 256 KB,并验证 max_buf 系统属性也 > 256 K。当我尝试发送大数据时,连接失败。
我是套接字编程的新手,所以如果需要更多信息,请告诉我。我想我缺少一些套接字选项。
操作系统:solaris sparc
linux - 检查已安装的信号处理程序
我有一个库,它为 SIGSEGV 安装信号处理程序以进行调试。SIGSEGV 处理程序只是打印一些信息然后退出程序。
最近,我需要从 Java 调用这个库(使用 JNI),我遇到的问题是 JVM 还为 SIGSEGV 安装了一个信号处理程序,用于比我更有用的目的。
所以我要选择的操作是,如果我的库发现已经为信号安装了信号处理程序,它根本不会安装任何信号。
为清楚起见,我使用的是 sigaction 调用。
现在要实现我的功能,我要做的是:
一种。屏蔽所有信号。
湾。调用 sigaction 并检查 oact 是否返回有效的处理程序。
C。如果是这样,请使用 oact 重新调用 sigaction 作为新行为。
d。UNBLOCK 信号。
B和c对我来说似乎很麻烦。我想要的是能够确定一个特定的信号是否已经有一个处理程序,而无需先替换处理程序,然后用原始处理程序重新替换它(什么都没有)。
还有什么比 sigaction 更细粒度的吗?
c - 标准如何指定对常规文件的原子写入(不是管道或 fifo)?
posix 标准规定,当向管道或 FIFO 写入少于 PIPE_BUF 字节时,授予原子性,也就是说,我们的写入不会与其他进程混合。但我未能找出标准如何指定常规文件。我的意思是,当我们写入少于 PIPE_BUF 时,它也将被授予原子性。但我想知道普通文件有这样的限制吗?我的意思是,管道有容量,所以当写入管道并超出其容量时,内核将使写入器休眠,因此其他进程将有机会写入,但普通文件似乎不必有这样的限制,我说的对吗?
我正在做的是几个进程将日志生成到文件中。当然,设置了 O_APPEND。
x86 - rdtsc 的返回值是_always_ mod 10 == 0 on Atom N450
在我的 E8200 机器上,这不会发生,但在我的 Atom N450 上网本(都运行 OpenSuse 11.2)上,每当我读取 CPU 的 TSC 时,返回的值为mod 10 == 0
,即它不能被 10 整除。我正在使用 RDTSC测量有趣的代码所花费的时间的价值,但为了演示的目的,我编写了这个小程序:
(我通常使用自己的例程进行转换,但为了防止读者暗示可能存在错误,我在这里仅使用 printf() 。)
使用上面的代码,输出是(例如):
可以很容易地看出,delta 在合理的范围内变化。但显着(不是说合谋;-)是最低有效十进制数字始终为0。
我已经观察到这种现象两年多了,而 Stack Overflow 并不是我公开这个问题的第一个地址。但我还没有得到一个合理的答案。我们(我和其他人)提出的想法是
- TSC 仅每 10个周期增加一次,然后增加 10,或
- TSC 在内部正确更新,但仅每 10个周期反映到外部,或
- TSC 每个周期递增 10。
然而,这些观点都没有真正的意义。我实际上应该在 E8200 上运行一个类似的程序(当前出现故障),以查看增量的数量级是否与上述输出中的数量级相同或只有十分之一。(有志愿者吗?)
谷歌搜索没有帮助,英特尔的手册也没有。
在与其他人讨论时,没有其他人经历过同样的行为。如果它与内核有关,那么至少有 3 个版本受到影响,但是……内核与它有什么关系?
我还使用了上网本,它带有一个新的主板——意味着一个新的 CPU,所以 N450 至少有两个单独的实体必须受到影响。
我还针对时钟频率变化采取了措施(无论我将时钟固定到什么频率,值都只在预期范围内变化(如图所示)),并关闭了 HT,尽管这些实际上应该有助于获得一些其他最低有效数字,而不是阻止它们。但只是为了确定。
好吧,如果有人想在他们的机器上运行程序,命令行是(假设你将源代码保存在文件中rdtsc.s
):
为了用 gcc 前端构建它,即
您必须添加(或替换_start:
标签)main:
标签并使其成为全局标签。
[更新(2012-09-15 ~21:15 UTC):实际上我之前也可以这样做:我只是让它在 a 之前和之后取 TSC sleep(1)
,这给出了一个略大于 1,666,000,000 的增量,这表明第三个上面列表中的点是错误的。但我仍然不知道为什么我没有得到完整的精度。/更新]
linux - 解析共享库中的符号名称 (Linux)
我正在 Linux 中进行动态二进制分析。鉴于程序是动态链接的(加载时链接)并且没有地址空间随机化,如果正在调用标准库函数,我必须解析函数名称。我在反汇编代码中看到,对标准库例程的调用首先分支到 .plt 部分中的某个地址,PC 正在加载那里计算的内存地址。顺便说一句,它在 ARM Linux 中,但我猜一般的想法是一样的。
我是系统编程的新手。我不太了解库是如何链接的以及在运行时如何解析地址。专家的任何想法表示赞赏。
linux - 使用 dup2 复制手动管道时出现无法解释的行为
我有两组代码都试图执行类似ls|grep pip
一个有效的和一个无效的。
工作代码创建了 2 个子进程,每个子进程使用一个子进程来执行一个命令,另一个简单地尝试通过创建一个子进程来执行此操作。即在说孩子和父母中的grep中执行ls。这似乎不起作用。而且我似乎也没有任何错误。
有人可以告诉我问题是什么吗?它为什么存在?
不工作:
以下是代码:
在职的: