file.c

file.cは、file関係、いちいちfopenしてごにょごにょしてfcloseするのがめんどくさいな… と思った結果誕生しました。 
いまのところ、入ってる関数は 
① ファイルの存在を確認する、int file_exist(char *filename) 
② ファイルのサイズを取得する、int file_getsize(char *filename) 
③ ファイルから一行分読み込む、int file_gets(char *filename, char *s, int size)
④ ファイルに書き込む、int file_puts(char *filename, char *s, int size)
です。

file.c ー ver.2ができましたのでそちらも。
これもまあ、そんなに説明する必要ないと思いますので、ひとまずソースを。
#ifndef _FILE
#define _FILE

#include<stdio.h>

int file_exist(char *filename);
int file_getsize(char *filename);
int file_gets(char *filename, char *s, int size);
int file_puts(char *filename, char *s, int size);

int file_exist(char *filename){
   FILE *fp = fopen(filename, "r");
   if(fp == NULL) return 0;
   fclose(fp);
   return 1;
}

int file_getsize(char *filename){
   FILE *fp = fopen(filename, "r");
   if(fp == NULL) return -1;
   fseek(fp, 0, SEEK_END);
   int re = (int)ftell(fp);
   fclose(fp);
   return re;
}

int file_gets(char *filename, char *s, int size){
   int c, k = 0;
   FILE *fp = fopen(filename, "r");
   while(1){
      c = fgetc(fp);
      if(c == EOF || c == '\n' || size-- <= 1 ) break;
      s[k++] = (unsigned char)c;
   }
   s[k] = '\0';
   fclose(fp);
   if(strlen(s) == 0) return 0;
   else return 1;
}

int file_puts(char *filename, char *s, int size){
   int re = 1;
   FILE *fp = fopen(filename, "w");
   if(fwrite(s, sizeof(char), size, fp) <= 0) re = 0;
   fclose(fp);
   return re;
}

#endif
まあ特に書くこともありませんが、一点だけ。

file_gets関数で
c = fgetc(fp)としています。
charを読み取って返すのになぜint型のcを使うのかと。
これは、ファイルの終わりやエラーの時に返すらしい、「EOF」のため。
この中身を見てみると…
#include <stdio.h>
int main(){
   printf("%d\n", EOF);
   return 0;
}

$ ./test
-1


というわけで、-1なのです。
たったこれ一つ表現するために、intにまで拡張する、プチ贅沢でした。