我想用system()
函数执行以下命令,
awk -F [][] '/dB/ { print $2 }' <(amixer sget Master) > sound_level
当我在终端写入时,它给了我想要的输出。 但是当我在C中使用系统函数调用此命令时,它会给我错误。
我的代码是:
#include<stdio.h>
#include <stdlib.h>
int main()
{
system("awk -F [][] '/dB/ { print $2 }' <(amixer sget Master) > sound_level");
return 0;
}
它给了我以下错误:
sh: 1: Syntax error: "(" unexpected
我也尝试过:
awk -F [][] '/dB/ { print $2 }' < /(amixer sget Master /) > sound_level
但它不起作用。
感谢任何帮助。
答案 0 :(得分:8)
阅读system(3)。那个C函数(你可能应该避免,更喜欢明确syscalls(2),如fork
&amp; execve
)正在运行POSIX /bin/sh -c
;另请阅读popen(3)。
但是您的交互式shell可能是bash
,其行为与POSIX sh
不同,特别是对于<(amixer sget Master)
等重定向
为了使事情变得更复杂,/bin/bash
程序在被调用为sh
时,会将其行为更改为POSIX sh
,因此在许多系统上,{ {1}}是/bin/sh
的符号链接...
另请阅读GNU bash
,Advanced Linux Programming和Advanced Bash Scripting Guide的文档...
然后,使用显式syscalls(2)设置管道和重定向,或者编写一些/bin/bash
或bash
脚本(但可能不是POSIX zsh
脚本!)做这项工作。
我不知道/bin/sh
做了什么,但也许您可能会考虑像
amixer sget Master
(并且上面的管道与POSIX amixer sget Master | awk -F '[][]' '/dB/ { print $2 }'
兼容,因此可以从popen(3)调用...)
我很惊讶你需要做所有这些。我想可以通过sh
详细了解ALSA并阅读一些Guide thru the Linux sound API