首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读STDIN,鸡计划

读STDIN,鸡计划
EN

Stack Overflow用户
提问于 2014-03-20 03:59:57
回答 1查看 1.3K关注 0票数 0

我知道如何(或多或少)在C中这样做:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int
main(int argc, char** argv)
{
  char buf[BUFSIZ];
  fgets(buf, sizeof buf, stdin); // reads STDIN into buffer `buf` line by line
  if (buf[strlen(buf) - 1] == '\n')
  {
    printf("%s", buf);
  }
  return 0;
}

如果存在,希望的最终结果是从管道中读取STDIN。(我知道上面的代码不会这样做,但我不知道如何只在从管道/本地文档读取时才这样做)。

在鸡肉计划中,我怎样做类似的事情呢?

就像我之前说过的,最终目标是能够做到这一点:

代码语言:javascript
复制
echo 'a' | ./read-stdin
# a

./read-stdin << EOF
a
EOF
# a

./read-stdin <<< "a"
 # a

./read-stdin <(echo "a")
 # a

./read-stdin < <(echo "a")
 # a
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-23 03:49:11

弄明白了。

代码语言:javascript
复制
;; read-stdin.scm

(use posix)
;; let me know if STDIN is coming from a terminal or a pipe/file
(if (terminal-port? (current-input-port))
   (fprintf (current-error-port) "~A~%" "stdin is a terminal") ;; prints to stderr
   (fprintf (current-error-port) "~A~%" "stdin is a pipe or file"))
;; read from STDIN
(do ((c (read-char) (read-char)))
   ((eof-object? c))
   (printf "~C" c))
(newline)

根据鸡的维基terminal-port?是鸡的isatty()函数。

注意事项

上面的例子在编译时效果最好。使用csi运行它似乎使terminal-port?总是返回true,但也许向(exit)和文件的第四端添加一个显式调用会导致file解释器退出,从而允许STDIN不是终端?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22523226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档