关于这个的问题已经在C中被问到 文件结尾(EOF), 但它仍然没有完全解决我的问题.
EOF在任何数据流中都没有意义stdin,例如,如果我有一些data.txt文件,fgetc()将读取所有字符并返回到文件末尾并返回-1.
我不明白的是EOFin 的概念stdin.如果我使用getchar()它,它将等待我输入一些东西,所以如果没有写入,文件结束,(EOF)不会自动返回?
因此,它是只有用户可以调用EOF在stdin按Ctrl+ Z?如果是这样,那么EOFin的一些用途是stdin什么?我想它会告诉程序继续读取,直到用户调用文件结束?是这个吗?
谢谢
好吧,我有这个json文件:
{
"joe": {
"name": "joe",
"lastName": "black"
},
"matt": {
"name": "matt",
"lastName": "damon"
}
}
Run Code Online (Sandbox Code Playgroud)
我想添加一个node.js的人:
{
"joe": {
"name": "joe",
"lastName": "black"
},
"matt": {
"name": "matt",
"lastName": "damon"
},
"brad": {
"name": "brad",
"lastName": "pitt"
}
}
Run Code Online (Sandbox Code Playgroud)
使用下面的代码我试图读取json文档,解析它,添加人,然后再次写入文件.但是,在写入函数中无法识别已解析的对象(jsonObj).我知道它与事件循环有关,但我不知道如何解决它.我尝试使用process.nextTick,但无法使其工作.
var jsonObj;
fs.open('files/users.json', 'r+', function opened(err, fd) {
if (err) {
throw err;
}
var readBuffer = new Buffer(1024),
bufferOffset = 0,
readLength = readBuffer.length,
startRead = 0;
fs.read(fd, readBuffer, bufferOffset, readLength, startRead, function read(err, readBytes) {
if …Run Code Online (Sandbox Code Playgroud) 关于刷新stdin有很多问题,我的不是关于如何刷新它,而是关于以下函数的含义:
while((c = getchar()) != '\n' && c != EOF);
Run Code Online (Sandbox Code Playgroud)
我试图想一想为什么以及如何在这个函数中使用EOF来清空stdin的场景?用户键入内容并按回车键,我们清空缓冲区直到找到输入,EOF在哪里进入?
谢谢
编辑:非常感谢第一个答案和第二个评论,它回答了我的问题并完全满足了我.
除了我们从一个我们有真实EOF的文件管道我们的输入的场景,这几乎回答了我的问题,我仍然不明白为什么我们在任何其他情况下需要EOF这样的函数.用户只能在终端的行开头调用EOF,因此不能用于清空缓冲区.