Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从STDIN阅读,鸡肉计划_C_Pipe_Stdin_Zsh_Chicken Scheme - Fatal编程技术网

C 从STDIN阅读,鸡肉计划

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读取时执行上述操作)

我知道如何(或多或少)在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读取时执行上述操作)

我如何在鸡肉计划中做类似的事情

正如我之前所说,最终目标是能够做到这一点:

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<