【问题标题】:How do I read a single character from stdin synchronously?如何从标准输入同步读取单个字符?
【发布时间】:2013-11-25 05:42:24
【问题描述】:

换一种说法,C 的getchar 函数的node.js 等价物是什么? (它等待输入,当它得到它时,它会返回字母的字符代码,随后的调用会从标准输入中获取更多的字符)

我尝试搜索谷歌,但没有一个答案是同步的。

【问题讨论】:

标签: node.js


【解决方案1】:

这里是基于fs.readSync的getChar的简单实现:

fs.readSync(fd, 缓冲区, 偏移量, 长度)

与其他答案不同,这将是同步,仅从标准输入读取一个字符并阻塞,就像C的@ 987654322@:

let fs = require('fs')

function getChar() {
  let buffer = Buffer.alloc(1)
  fs.readSync(0, buffer, 0, 1)
  return buffer.toString('utf8')
}

console.log(getChar())
console.log(getChar())
console.log(getChar())

【讨论】:

  • 使用这种方法,我得到以下错误,你知道吗?错误:EAGAIN:资源暂时不可用,在 Object.readSync (node:fs:611:3) 处读取
  • 看起来标准输入不可用 - 我假设您正在交互模式下测试此代码(使用node -i)?像这样执行时它不起作用,但在执行node script.jsecho "input" | node script.js 时会起作用。
【解决方案2】:

我只想读取一个字符,然后退出。

process.stdin.resume();
process.stdin.on(
    'data',
    function (chunk) {
        // process.stdout.write('line read: ' + chunk);
        process.stdout.write('char read: ' + chunk[0]); // gives ascii 97 when a is typed.
        process.exit(0);
    }
);

要以同步方式读取 char,请将上述功能包装在新的 Promise(..) 结构中,请参见:https://github.com/manoharreddyporeddy/programming-language-notes/blob/master/my-js-nodejs/my-nodejs-programming-notes.js#L96

【讨论】:

  • 链接是404,不退出怎么办?
  • 修复了链接,文件被移到了一个文件夹中。
  • 在我的系统中测试过,看来我必须点击回车才能触发数据事件。所以还是不符合我的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-18
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 2021-06-18
相关资源
最近更新 更多