- 论坛徽章:
- 1
|
本帖最后由 L_kernel 于 2011-09-25 15:32 编辑
先看看getc的情况。
下面那个是我测是的文件。在t后面我插入了一个控制字符。<C-D>- $ cat -A eof_test1.txt
- This is a t^Dest file.$
复制代码 执行下面的代码。
eof_test.c- #include <stdio.h>
- int main()
- {
- int c;
- FILE* fp;
- if ((fp = fopen("eof_test1.txt", "r")) == NULL) {
- printf("open file %s error.\n", "eof_test1.txt");
- return;
- }
- while ((c = getc(fp)) != EOF) {
- putchar(c);
- }
- putchar('\n');
- return 0;
- }
复制代码 结果所有文本都打印出来,包括控制字符<C-D>。
若是使用getchar()函数,如果从终端输入<C-D>时,getchar()会返回EOF,从而使下面的代码退出循环。- $ cat eof_test1.c
- #include <stdio.h>
- int main()
- {
- int c;
- while ((c = getchar()) != EOF)
- putchar(c);
- return 0;
- }
复制代码 Unix下面一切皆文件,而getchar()又是getc的一个特殊版本,对于同样的字符序列,解释应该一样的?也就是
getc() -------- 磁盘上的文件 --------- 控制序列<C-D>
getchar() -------- 标准输入stdin --------- 控制序列<C-D>
上面getc在文件当中读到控制序列<C-D>,应该也是返回EOF的。
是不是tty驱动对stdin流入的<C-D>控制序列多了一层解释,使它们的效果不同? |
|