- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
简短版:
我正在尝试使用管道让这样的东西在 c 中工作:
echo 3+5 | bc
更长的版本:
按照 http://beej.us/guide/bgipc/output/html/multipage/pipes.html 上关于管道的简单说明进行操作,我尝试创建类似于该页面上最后一个示例的内容。准确地说,我尝试使用 2 个进程在 c 中创建管道。子进程将他的输出发送给父进程,父进程使用 bc 计算器使用该输出进行计算。我基本上复制了之前链接页面上的示例,对代码做了一些简单的调整,但它不起作用。
这是我的代码:
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main(void)
{
int pfds[2];
pipe(pfds);
if (!fork()) {
close(1); /* close normal stdout */
dup(pfds[1]); /* make stdout same as pfds[1] */
close(pfds[0]); /* we don't need this */
printf("3+3");
exit(0);
} else {
close(0); /* close normal stdin */
dup(pfds[0]); /* make stdin same as pfds[0] */
close(pfds[1]); /* we don't need this */
execlp("bc", "bc", NULL);
}
return 0;
}
我在运行时收到 (standard_in) 1: syntax error 消息。我也尝试使用读/写,但结果是一样的。
我做错了什么?谢谢!
最佳答案
bc
的输入必须以换行结束。使用
printf("3+3\n");
它会神奇地起作用!顺便说一句,您可以验证这是问题所在
$ printf '3+3' | bc
bc: stdin:1: syntax error: unexpected EOF
$ printf '3+3\n' | bc
6
关于c - 管道输出到 bc 计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14171701/
我试图在多台主机上运行这个脚本,但它们没有安装 bc。 我读到你可以使用类似“awk 'BEGIN {print...}' 的东西,但我无法让它工作。 #!/bin/bash nproc=$(npro
我试图找到一个正则表达式来匹配具有字符串“question”但不具有或不包含字符串“ion”的所有字符组合。 例子: questionxxxx ------>匹配 xxxquestion-------
我可以使用 Python 运行 bc,代码如下: subprocess.Popen("bc", stdout=subprocess.PIPE).communicate()[0] 但是,这只会启动 bc
我们使用API在Dynamic 365 BC中处理采购数据,以更新、接收和开具采购订单行。(Dynamic 365插件在不使用文件的情况下解析附注附件XML)我们现在希望将发票文档作为附件上传到采购发
我正在尝试使用 bc 将我的数字计算缩放到一位小数(所有适用的四舍五入) linux下的命令。这是我的测试表达式: echo "scale 1; 90 - 70.333" | bc 但是,我最终得到了
jack 10 10号 A 20 卢卡20 A Bc U 20 我想得到这些数字的总和:10 + 10 + 20 + 20 + 20 = 80 但是我不能使用cat input|cut -d " "
我正在用 C# 实现一些东西,对此我有一个单独的规范,并且对我需要做什么有相当清楚的了解,但同时作为引用,我有一个 Java 实现,并且希望遵循以下中的 Java 实现我尽可能接近这个案例。 该代码涉
我正在尝试将 32 个字符长的十六进制字符串(例如:A41EB86E184207262C12F66E7C480577)转换为二进制。我正在使用: echo "ibase=16; obase=2; $l
我正在尝试编写一个 bash 脚本,我需要做一些 float 学运算。基本上我想做这样的事情: NUM=$(echo "scale=25;$1/10" | bc) if [ $? -ne 0 ] th
这是我的 netstat 命令的输出。我想计算第一个字段的总数,例如 7+8+1+1+1+1+3+1+2..so on... 我如何使用 bc 或任何其他方法命令来计算它们的总数? [root@exa
我希望以 6 十六进制值格式返回以下十六进制... [admin@X~]$ echo "obase=16; 16777215" | bc FFFFFF [admin@X~]$ echo "obase=
您好,我有一个脚本,用于计算从服务器返回的一组值的标准偏差。 我可以轻松检索命令并使用命令构建有效的字符串。 bc <<< "scale=10; sqrt((0+((782636-782030)^2)
我不明白为什么 bc 工具有时会忽略比例选项。 这是一个例子: > echo 'scale=2; 2.777 - 1.4744' | bc 1.3026 预期结果是: 1.30 附加信息: > bas
我正在尝试使用“bc”在 Bash 脚本中实现以下计算,但“scale”选项产生的结果不正确,末尾有 2 个额外的零,这意味着我必须手动修剪它(丑陋). 计算: ((2592000-239)÷2592
我正在使用 bc从 bash 脚本来做一些快速而肮脏的 BigInteger 数学运算,但是,当我提高比例时,它开始在我身上分割线: pax> echo 'scale=200 ; 1 / 4' | b
我想计算一个数字的对数(以 10 为底)。如何使用 bc 执行此操作? 最佳答案 使用 -l 选项调用 bc(以启用数学库),如下所示: $ echo 'l(100)/l(10)' | bc -l 2
我在 GitHub 上发现了术语“BC Break”——它是什么意思? 最佳答案 “BC 中断”通常意味着 backward compatibility笼统地说,但正如 David Schwartz
对于大型输出,unix 中的 bc 实用程序以这种格式提供输出: $ bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006
我想显示例如ac年份为1999年12月31日,BC年份为2000年12月31日(-)。我花了一些时间研究 joda api,例如像这样: new DateTimeFormatterBuilder().
#! /bin/sh a1=260 a2=9150 echo "$a1 * 100 / $a2" | bc 输出是 2 它应该在哪里 2.8415 为什么我在使用 bc 时精度会丢失? 最佳答案 试试
我是一名优秀的程序员,十分优秀!