我想用system()函数执行以下命令,
awk -F [][] '/dB/ { print $2 }' <(amixer sget Master) > sound_level
Run Code Online (Sandbox Code Playgroud)
当我在终端写入时,它给了我想要的输出.但是当我在C中使用系统函数调用此命令时,它会给我错误.
我的代码是:
#include<stdio.h>
#include <stdlib.h>
int main()
{
system("awk -F [][] '/dB/ { print $2 }' <(amixer sget Master) > sound_level");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误:
sh: 1: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
awk -F [][] '/dB/ { print $2 }' < /(amixer sget Master /) > sound_level
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
任何帮助表示赞赏.
阅读系统(3).那个C函数(你可能应该避免,更喜欢像&这样的显式系统调用(2))运行POSIX ; 读也popen(3).forkexecve/bin/sh -c
但是您的交互式shell可能bash与POSIX的行为不同sh,特别是对于重定向等<(amixer sget Master)
为了使事情变得更复杂,/bin/bash 程序在被调用时sh会将其行为更改为POSIX sh,因此在许多系统上,/bin/sh是一个符号链接/bin/bash...
所以请阅读GNUbash,Advanced Linux Programming和Advanced Bash Scripting Guide的文档......
然后,使用显式系统调用(2)设置管道和重定向,或者编写一些bash或zsh脚本(但可能不是POSIX /bin/sh!)来完成工作.
我不知道是什么amixer sget Master ,但也许你可能会考虑像管道一样
amixer sget Master | awk -F '[][]' '/dB/ { print $2 }'
Run Code Online (Sandbox Code Playgroud)
(以上管道与POSIX sh兼容,可以从popen(3)调用...)
我很惊讶你需要做所有这些.我想可以通过一些伪文件来查询音量/sys/
了解有关ALSA的更多信息,并通过Linux声音API阅读一些指南