操作系统实验七

实验七 文件操作

实验目的

  • 熟悉和掌握利用库函数操作文件。

实验内容

  • 编写程序实现对文件的显示和合并操作。

实验指导

一 涉及的函数调用

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;
}

三. 思考与练习:

试编写一个程序,统计一个文件有多少行。

posted on 2012-02-11 14:14  wuqq  阅读(463)  评论(0)    收藏  举报