'阅读'的问题系统功能

时间:2015-12-15 10:34:57

标签: c

我正在编写一个程序,它必须从文件中读取一个单词,该单词由' '\n与其他单词分开(我决定使用'read'系统函数并且面临一个问题。

特别是,由于它是用手册编写的,'read'必须返回0,而没有其他内容可供阅读(到达EOF),但在我的情况下,它会返回{{ 1}}(我检查了返回符号的\n代码及ASCII 10 \n并检查了我的程序多次,它总是返回相同的代码) 。这是代码

char *read_word_from_file(int fd, int *flag)
{
    int i = 0;
    char ch, *buf = NULL;
    if (!read(fd, &ch, 1)) {    //file is empty
        *flag = 1;
        return NULL;
    }
    while (ch != ' ' && ch != '\n') {
        if (!(buf = (char *) realloc(buf, i + 1))) goto mem_err;
        buf[i++] = ch;
        if (!(read(fd, &ch, 1))) {
            *flag = 1;
            break;
        }
    }
    buf[i] = '\0';
    return buf;
mem_err:
    perror("realloc");
    exit(1);
}

flag变量用于表示外部函数的EOF,它调用了这个函数。所以,我的问题是"这样的行为是正常的,还是我弄错了某处"

P.S. - Off-topic question, how do you make a part of text(a single word) shadowed like a code samples?

1 个答案:

答案 0 :(得分:1)

gedit根本不会在文件中显示换行符。为什么文件中有换行符?取决于您如何创建该文件。如果您使用了例如puts("M");,那么您应该了解puts()会添加换行符。如果您使用编辑器创建它,您应该理解编辑器通常编写以换行符结尾的完整行。                      - 延