1.输入输出

1.1 字符输入输出 (I/O) 概念

  • getchar()putchar() 函数用于处理单个字符的输入和输出。虽然这种方式可能效率较低,但对于处理普通文本仍然非常适用。
  • 程序通过循环读取输入的字符并输出,直到遇到指定的结束符(如 #EOF)。

1.2 文件流与标准 I/O

文件是存储在设备(如硬盘或光盘)上的数据单位,程序可以通过文件流来读写文件。

流 (Stream) 是一种从输入输出设备进行数据传输的机制。数据通过流从程序传输到终端或文件等。

键盘输入和文件输入可以通过类似的方式进行处理。在 C 语言中,程序通过流接口处理输入输出。

标准输入流 (stdin)、标准输出流 (stdout) 和标准错误流 (stderr) 是典型的 I/O 流应用。

1.3 文件结尾的处理

在 CP/M、IBM-DOS、MS-DOS 等早期操作系统中,使用特定的字符(如 Ctrl+Z)作为文本文件的结束符。

现代系统中文本文件可能不再使用此方法,而是根据文件的大小或者 EOF 结束符来判断文件结束。

1.4 EOF(文件结束标志)

  • EOF(end of file)是一个特殊值,在 C 程序中通常定义为 -1,用于表示文件的结尾。
  • 函数 getchar() 返回 EOF 时意味着已经读到了文件的结尾。

1.5 缓冲区

缓冲区 (Buffer) 用于存储从输入流中读取的字符,并在适当时刻将它们传递给程序或输出到终端。

输入缓冲区中存储的是用户输入的字符,在按下 Enter 键后,程序才会读取这些字符。

2.重定向和文件

2.1 重定向输入和输出

输入重定向 <:这允许用户将文件内容直接作为命令的输入,而非从标准输入(通常是键盘)读取数据。

输出重定向 >:这用于将命令的输出写入到指定文件中,替换原有内容,或使用 >> 进行追加而非替换。

  • 示例:echo_eof < words:将 words 文件作为 echo_eof 命令的输入。

    echo_eof > mywords:将 echo_eof 命令的输出写入 mywords 文件。

组合重定向的概念:可以将多个命令组合在一起,并进行多次重定向。例如,将 echo_eof 的输出重定向到 mywords,再重定向到 savewords,如命令 echo_eof > mywords > savewords

2.2 文件操作与C语言编程

C语言文件I/O

fopen:打开一个文件,并返回一个文件指针

getc:从文件指针指向的文件中读取下一个字符。

putc:将一个字符写入到指定的文件指针指向的文件中。

fclose:关闭一个已经打开的文件,并释放资源。

错误处理:检查 fopen 返回的文件指针是否为 NULL,以判断文件是否成功打开,若失败则输出错误信息并退出程序。