11.03.2015

Linux C fgets(), fputs(), foef(), ferror()

繼之前寫過一個fopen(), fclose(), fread(), fwrite(), fseek(), ftell(), rewind()等的範例之后,接下來的練習和回憶也就相對地簡單多了!!

這個範例的需求很簡單,開啟GET.TXT檔案,然後把檔案內容逐一地寫進PUT.TXT;順便給列印出來

GET.TXT的檔案內容如下,內文是我隨便key的....
Hello!! World!! 
I'm Picasso, 
This is my testing function in C.
How are you??
I'm so so, and you??
Thanks, bye!!
1. 用ferror(fp) != 0; 等同於fp == NULL;

2. feof(fp) == 0,來判斷是否已經達到檔案的結尾 (End Of File)

程序碼範例如下:
// fgets_fputs_foef_ferror.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int 
main()
{
    FILE *fp0 = (FILE *)NULL, *fp1 = (FILE *)NULL;
    char szTemp[32];

    fp0 = fopen("GET.TXT", "r");
    if (ferror(fp0) != 0) {
        fclose(fp0);
        exit(EXIT_FAILURE);
    }

    fp1 = fopen("PUT.TXT", "w+");
    if (ferror(fp1) != 0) {
        fclose(fp1);
        exit(EXIT_FAILURE);
    }

    while (feof(fp0) == 0) {
        memset(&szTemp, '\0', sizeof(char) * 32);
        fgets(szTemp, sizeof(char) * 32, fp0);
        fputs(szTemp, fp1);
        printf("%s", szTemp);
    }
    fclose(fp0);
    fclose(fp1);

    exit(EXIT_SUCCESS);
}
由此可見,fgets(), fputs()在一個檔案中是以「行」為單位的,在檔案中會以是否已讀取到「換行字元 ('\n')」作為判斷的依據

此外,在這個範例中看不出來,fgets()在讀取資料時,會多送一個換行字元 ('\n'),而fputs()則不會。

附上這些函式的原型宣告:

1. char *fgets(char *str, int num, FILE *fp);

2. int fputs(const char *s, FILE *stream);

3. int feof(FILE *stream);

4. int ferror(FILE *stream);

沒有留言:

張貼留言