c - 如何使用 EOF 将 shell 字符串传递给 c 程序?
问题描述
有点 C 菜鸟,尤其是 shell 菜鸟,所以请原谅。我有一个任务,我必须从 shell 脚本中读取一个字符串并将其输入到带有标准输入的 ac 程序中。教授给了我们一个已经写好的脚本,字符串以 << EOF 开头并以 EOF 结尾。我不知道如何在我的程序中处理这个字符串。谢谢您的帮助。
c程序:
#include<stdio.h>
int main(int argc, char * argv[]){
int i = 0, aCount = 0, eCount = 0, iCount = 0, oCount = 0, uCount = 0;
while(argv[1][i] != EOF){
if(argv[1][i] == 'A' || argv[1][i] == 'a'){
aCount++;
}
if(argv[1][i] == 'E' || argv[1][i] == 'e'){
eCount++;
}
if(argv[1][i] == 'I' || argv[1][i] == 'i'){
iCount++;
}
if(argv[1][i] == 'O' || argv[1][i] == 'o'){
oCount++;
}
if(argv[1][i] == 'U' || argv[1][i] == 'u'){
uCount++;
}
i++;
}
printf("%s%d\n", "Number of A's: ", aCount);
printf("%s%d\n", "Number of E's: ", eCount);
printf("%s%d\n", "Number of I's: ", iCount);
printf("%s%d\n", "Number of O's: ", oCount);
printf("%s%d\n", "Number of U's: ", uCount);
return 0;
}
剧本:
run () {
echo "$*"
if $*
then echo 'success'
else echo 'error'
fi
}
run ./count_vowels <<EOF
Adieu, Bo!
EOF
解决方案
<<EOF
是一种 shell 表示法,意思是“从脚本中读取以下行,直到EOF
看到并将它们作为标准输入传递到程序中。”</p>
对程序来说,这将作为一个常规流出现在stdin
. 您可以使用常用函数读取,包括getchar
、scanf
等,直到到达文件结尾(真正的流结尾),此时函数将指示它们无法以各种方式进一步读取。(主要是通过返回EOF
,但请注意,scanf
如果在到达流结束之前的一次调用中发生部分匹配,则可能会返回其他值,例如返回 0 或 1 表示尽管请求了 2 个项目,但已分配了 0 或 1 个项目。)
这称为此处文档。有关变体和修饰,请参阅您的 shell 文档。您的指令选择了特定的字符串“EOF”;可以使用 shell 接受的其他东西,例如:
ProgramName Arguments <<EndOfMyInput
MyLine1
MyLine2
MyLine3
EndOfMyInput
推荐阅读
- python - PHP解析python脚本的dict输出
- css - fr 单位不能是 minmax() (css) 的最小值
- ios - 静态 UIView 添加到 superview 后变为 nil
- javascript - 如何在 react firebase-ui 中查找用户是否是第一次登录?
- python - Python plotly:从背景中几乎看不到条形
- google-apps-script - 从谷歌表中的下拉数据列表中获取总数
- lua - Kong如何检测连接超时?
- google-apps-script - 从同一脚本文件将 AppScript 项目发布为 webApp
- django - Django-q:警告在超时后重生的工人 Process-1:1
- delete-operator - RECT 结构分配和删除