#include <stdio.h>
int fputc(int c, FILE *stream);
if(fputc('a', stream) == EOF)
{
/* ERROR */
}
성공하면 c를 반환한다. example에서는 'a'를 반환
#include <stdio.h>
int fputs(const char *str, FILE *stream);
void writeString()
{
FILE *stream;
stream = fopen("test.txt", "a");
if(!stream)
{ /* ERROR */
}
if(fputs("Hello world.\n", stream) == EOF)
{/* ERROR */
}
if(fclose(stream) == EOF)
{/* ERROR */
}
}
#include <stdio.h>
size_t fwrite(void *buf, size_t size, size_t nr, FILE *stream);
성공하면 nr이 반환되며 실패하면 nr보다 작은 값이 반환(성공한 갯수를 반환)
* binary는 변수크기, memory상의 정렬, 채워넣기, MSB/LSB, 바이트 순서 등이 달라 execute file이 같다고 read에 fail이 발생할 수 있다.
#include <stdio.h>
typedef struct person{
char name[50];
int id;
}PERSON;
int writeToStream(void);
int readFromStream(void);
int main(void)
{
if(writeToStream() != 0)
{
perror("writeToStream");
return -1;
}
if(readFromStream() != 0)
{
perror("readFromStream");
return -1;
}
return 0;
}
int writeToStream()
{
FILE *out;
PERSON p_out = {"John", 1234};
out = fopen("data.dat","w");
if(!out)
{
perror("fopen");
return -1;
}
if(!fwrite(&p_out, sizeof(PERSON), 1, out))
{
perror("fwrite");
return -1;
}
if(fclose(out))
{
perror("fclose");
return -1;
}
return 0;
}
int readFromStream()
{
FILE *in;
PERSON p_in;
in = fopen("data.dat","r");
if(!in)
{
perror("fopen");
return -1;
}
if(!fread(&p_in, sizeof(PERSON), 1, in))
{
perror("fread");
return -1;
}
if(fclose(in))
{
perror("fclose");
return -1;
}
printf("name = %s, id = %d\n", p_in.name, p_in.id);
return 0;
}