C 从STDIN阅读,鸡肉计划
我知道如何(或多或少)在C中实现这一点:C 从STDIN阅读,鸡肉计划,c,pipe,stdin,zsh,chicken-scheme,C,Pipe,Stdin,Zsh,Chicken Scheme,我知道如何(或多或少)在C中实现这一点: #包括 #包括 int 主(内部argc,字符**argv) { char buf[BUFSIZ]; fgets(buf,sizeof buf,stdin);//逐行将stdin读入缓冲区'buf' if(buf[strlen(buf)-1]='\n') { printf(“%s”,buf); } 返回0; } 所需的最终结果是从管道(如果存在)读取标准DIN。(我知道上面的代码不能做到这一点,但我不知道如何仅在从管道/herdoc读取时执行上述操作)
#包括
#包括
int
主(内部argc,字符**argv)
{
char buf[BUFSIZ];
fgets(buf,sizeof buf,stdin);//逐行将stdin读入缓冲区'buf'
if(buf[strlen(buf)-1]='\n')
{
printf(“%s”,buf);
}
返回0;
}
所需的最终结果是从管道(如果存在)读取标准DIN。(我知道上面的代码不能做到这一点,但我不知道如何仅在从管道/herdoc读取时执行上述操作)
我如何在鸡肉计划中做类似的事情
正如我之前所说,最终目标是能够做到这一点:
echo'a'|/read stdin
#a
/读一下stdin就明白了
;;read-stdin.scm
(使用posix)
;; 让我知道STDIN是否来自终端或管道/文件
(如果(终端端口?(当前输入端口))
(fprintf(当前错误端口)“~A~%”标准输入是一个终端”);打印到标准输出
(fprintf(当前错误端口)“~A~%”stdin是管道或文件)
;; 从标准文本中读取
(do((c(读字符)(读字符)))
((eof对象?c))
(printf“~C”C))
(新行)
根据Chicken的说法,终端端口?
是Chicken的等价于C的isatty()
函数
注意
上面的例子在编译时效果最好。使用csi
运行它似乎会使终端端口?
始终返回true,但如果添加对(exit)
和文件结尾的显式调用,可能会导致Chicken Scheme解释器退出,从而允许STDIN
在前三个选项中的任何一个起作用后成为终端以外的东西,另外两个可以。第四个在命令行上提供了一个文件名,read stdin
程序必须打开并读取该文件名。也许你想写:/read stdin<@JonathanLeffler这跟什么有关系?带有read stdin
的zsh示例就是:示例。在zsh中,两个cat<之间存在差异cat<