操作系统实验七
实验七 文件操作
实验目的
- 熟悉和掌握利用库函数操作文件。
实验内容
- 编写程序实现对文件的显示和合并操作。
实验指导
一 涉及的函数调用
1. fopen( )
打开一个文件。
定义
FILE * fopen(const char * filename, const char * mode);
mode模式说明:
r 以只读方式打开文件,该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件.
+ 以可读写方式打开文件,该文件必须存在。
b 打开一个二进制文件,只允许读写数据。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
2. fclose()
关闭一个文件。如果成功关闭,fclose 返回 0,否则返回EOF(-1)。
定义
int fclose(FILE *stream);
3. fgetc()
从文件中读取字符。返回读取的一个字节。如果读到文件末尾返回EOF。
定义
int fgetc(FILE *stream);
4. fputc( )
输出一个字符到文件中。
定义
int fputc(int ch, FILE *stream);
5. putchar()
输出一个字符到标准输出(即显示器)中。等价于:fputc(ch, STDOUT);
定义
int putchar(int ch);
二. 实验步骤与参考程序:
1. 编写程序实现对文件内容的显示。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
if (argc != 2) {
printf("Please input file name!\n");
return 0;
}
FILE *file = fopen(argv[1], "r");
if (file == NULL) {
printf("Open error!\n");
return 0;
}
for(;;) {
char ch = fgetc(file);
if (ch == EOF) break;
putchar(ch);
}
fclose(file);
return 0;
}
2.假设当前目录下有俩个文件 a.txt 和 b.txt, 编写一个程序把俩个文件合并,并保存到 c.txt 中。
#include <stdio.h>
#include <stdlib.h>
void writeFile(char *filename, FILE* out) {
FILE *in = fopen(filename, "r");
if (in == NULL) {
printf("Open error!\n");
return;
}
for(;;) {
char ch = fgetc(in);
if (ch == EOF) break;
fputc(ch, out);
}
fclose(in);
}
int main(int argc, char **argv) {
if (argc != 4) {
printf("Usage: ./a.out file1 file2 out\n");
return;
}
FILE *out = fopen(argv[3], "w");
if (out == NULL) {
printf("Open error!\n");
return 0;
}
writeFile(argv[1], out);
writeFile(argv[2], out);
fclose(out);
return 0;
}
三. 思考与练习:
试编写一个程序,统计一个文件有多少行。
浙公网安备 33010602011771号