Desc :

 

mktime() - 더하고 빼진 시간을 실제 날짜에 맞게 자동변환해주는 기능


Source Code :

#include <stdio.h>
#include <time.h>

void main()
{
	time_t now;
	struct tm t, tb;

	now = time(NULL);
	t = *localtime(&now);;

	tb = t;

	t.tm_mon += 100;
	t.tm_mday += 90;

	mktime(&t);

	printf("오늘 날짜는 %d / %d / %d 입니다.\n"
		, tb.tm_year + 1900, tb.tm_mon, tb.tm_mday);

	printf("100개월 90일을 더한 날짜는 %d / %d / %d 입니다.\n"
		, t.tm_year + 1900, t.tm_mon, t.tm_mday);

	tb.tm_mon -= 100;
	tb.tm_mday -= 90;

	mktime(&tb);

	printf("100개월 90일을 뺀 날짜는 %d / %d / %d 입니다.\n"
		, tb.tm_year + 1900, tb.tm_mon, tb.tm_mday);


}

 


Result :

Desc :

 

 


Source Code :

#include <stdio.h>
#include <time.h>

#define DAYSEC (24*60*60)

void main()
{
	time_t now;
	struct tm t, chrismas = {0,0,0,25,12,2021};
	int n1, n2, nChrismas;

	now = time(NULL);
	t = *localtime(&now);;

	chrismas.tm_year -= 1900;
	chrismas.tm_mon -= 1;

	t.tm_hour = 0;
	t.tm_min = 0;
	t.tm_sec = 0;

	n1 = mktime(&t);
	n2 = mktime(&chrismas);

	nChrismas = (n2 - n1);
	chrismas = *localtime(&nChrismas);
	
	printf("크리스마스까지 %d개월 %d일 남았습니다! \n"
		, chrismas.tm_mon , chrismas.tm_mday);
}

 


Result :

Desc :

 

 


Source Code :

#include <stdio.h>
#include <time.h>

#define DAYSEC (24*60*60)

void main()
{
	time_t now;
	struct tm t, dday = {0,0,0,2,3,2021};
	int n1, n2, nDday;

	now = time(NULL);
	t = *localtime(&now);;

	dday.tm_year -= 1900;
	dday.tm_mon -= 1;

	t.tm_hour = 0;
	t.tm_min = 0;
	t.tm_sec = 0;

	n1 = mktime(&t);
	n2 = mktime(&dday);

	nDday = (n2 - n1) / DAYSEC;
	
	printf("개강일까지 %d일 남았습니다...(%d/%d/%d) \n"
		, nDday, dday.tm_year + 1900, dday.tm_mon + 1, dday.tm_mday);
}

 


Result :

Desc :

 

 


Source Code :

#include <stdio.h>
#include <time.h>

#define DAYSEC (24*60*60)

void main()
{
	int i;
	time_t now;
	struct tm t1, t2;
	int n1, n2, last;

	now = time(NULL);
	t1 = *localtime(&now);
	t1.tm_mday = 1;		// 날짜 1일로 고정
	t2 = t1;

	for (i = 0; i <= 11; i++)	// 월 0~11
	{
		t1.tm_mon = i;
		t2.tm_mon = i + 1;
		n1 = mktime(&t1);	// t1에 대한 시간을 초로 환산
		n2 = mktime(&t2);	// t2에 대한 시간을 초로 환산

		// ex. 1월1일과 2월1일의 차 -->  31일
		last = (n2 - n1) / DAYSEC;	// 시간차(초)를 일로 환산
		printf("%d년 %2d월의 마지막 날짜는 %d일입니다.\n"
			, t1.tm_year + 1900, t1.tm_mon + 1, last);
	}
}

 


Result :

Desc :

 

 


Source Code :

#include <stdio.h>
#include <time.h>

#define DAYSEC (24*60*60)

void main()
{
	time_t n1, n2;
	struct tm t1, t2;
	double elapsed;

	t1.tm_year = 98; //tm_year는 1900년도 이후로 측정 --> 1998
	t1.tm_mon = 10 - 1; // tm_mon 0~11월 --> 10월
	t1.tm_mday = 20;
	t1.tm_hour = 0;
	t1.tm_min = 0;
	t1.tm_sec = 0;

	n1 = time(NULL);	// 현재날짜
	t2 = *localtime(&n1);

	n1 = mktime(&t1);	// 1970/1/1 기준으로 한시간으로 변환
	n2 = mktime(&t2);

	n2 = n2 - n1;	// 두 날짜 간의 시간(초) 차
	elapsed = (double)(n2 / DAYSEC);	// 경과된 시간을 날짜로 환산

	printf("태어난지 %.f일 째...\n", elapsed);

}

 


Result :

Desc :

 

시간을 sprint() 함수를 이용하여 (형식화) buff에 저장하고

fputs()를 이용하여 파일에 문자열을 쓴다


Source Code :

#include <stdio.h>
#include <time.h>

void main()
{
	FILE *fp;
	char buff[200];
	time_t now;
	struct tm t;

	fp = fopen("C:\\Users\\w4135\\OneDrive\\test.txt","w+");

	if (fp == NULL)
	{
		perror("파일 쓰기 개방 에러");
		fcloseall();
		return;
	}

	now = time(NULL);
	t = *localtime(&now);
	sprintf(buff, "%d/%d/%d %d:%d:%d"
		, t.tm_year + 1900 , t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);

	fputs(buff, fp);
	fcloseall();

	puts(buff);

	puts("시간을 txt에 저장하였습니다.");


}

 


Result :

Desc :

 

 


Source Code :

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>

void main()
{
	FILE *fpR, *fpW;
	char buff[200];
	char *pbuf, *dup;
	int len, pos1, pos2;

	fpR = fopen("C:\\Users\\w4135\\test.txt", "r");

	if (fpR == NULL)
	{
		perror("파일 읽기 개방 에러");
		return;
	}

	fpW = fopen("C:\\Users\\w4135\\test_change.txt", "w+");

	if (fpW == NULL)
	{
		perror("파일 쓰기 개방 에러");
		fcloseall();
		return;
	}

	while (!feof(fpR))
	{
		fgets(buff, 200, fpR);

		pbuf = strstr(buff, "hello");	// 문자열 찾은 위치 저장

		if (pbuf)	// 검색되었다면
		{
			len = strlen(buff);	// 읽은 문자열 길이
			pos1 = pbuf - buff;	// 문자열이 검색된 위치

			dup = strdup(buff);	// 문자열 메모리 할당됨, 포인터값 반환
            
			strnset(&buff[pos1], 0, len - pos1);	// 문자열이 검색된 위치부터 문자열의 끝까지 null로 채움
			strcat(buff, "hi");	// buff에 문자열 추가

			pos1 = pbuf - buff + strlen("hello");	// hello 이후의 위치
			pos2 = pbuf - buff + strlen("hi");	// hello 전까지의 위치 + hi추가후의 위치

			strcpy(&buff[pos2], &dup[pos1]);	// hi추가 후 위치에 hello이후의 문자열 복사
			free(dup);
		}

		if (!feof(fpR)) fputs(buff, fpW);
	}

	fcloseall();
	puts("hello를 hi로 모두 교체하였습니다.");
}

 


Result :

Desc :

 

 


Source Code :

#include <stdio.h>
#include <string.h>

void main()
{
	FILE *fp;
	char buff[200];
	int line = 1;

	fp = fopen("C:\\Users\\w4135\\test.txt", "r");

	if (fp == NULL)
	{
		perror("파일 읽기 개방 에러");
		return;
	}

	while (!feof(fp)) // 파일의 끝에 올 때까지
	{
		fgets(buff, 200, fp);	// 200바이트를 읽어와 buff에 저장

		if (strstr(buff, "hello"))	// 버퍼에서 문자열 검색 --> 검색 성공시 위치 반환
		{
			printf("Line(%2d): %s", line, buff);
		}
		line++;
	}

	fcloseall();
}

 


Result :

Desc :

 

두개의 파일을 읽어와서 --> fread

 

한개의 파일에 씀 --> write


Source Code :

#include <stdio.h>

#define FILEREAD 4069

void main()
{
	FILE *fpR1, *fpR2, *fpW;	// 읽을 파일 포인터 2, 쓰기위한 포인터 1
	char buff[FILEREAD];
	int len;

	fpR1 = fopen("C:\\Users\\w4135\\source\\repos\\test.bin", "rb");	// 읽을 파일 개방 1

	if (fpR1 == NULL)
	{
		perror("파일 읽기 개방 에러");
		return;
	}

	fpR2 = fopen("C:\\Users\\w4135\\source\\repos\\test_copy.bin", "rb"); // 읽을 파일 개방 2

	if (fpR2 == NULL)
	{
		perror("파일 읽기 개방 에러");
		fcloseall();
		return;
	}

	fpW = fopen("C:\\Users\\w4135\\source\\repos\\test2.bin", "w+b");	// 써질 파일 개방

	if (fpW == NULL)
	{
		perror("파일 쓰기 개방 에러");
		fcloseall();
		return;
	}

	while (!feof(fpR1))	// 첫번째 파일이 끝날 때까지
	{
		len = fread(buff, 1, FILEREAD, fpR1);	// 1바이트씩
		
		if (ferror(fpR1))
		{
			perror("파일 읽기 에러1");
			fcloseall();
			return;
		}

		if (len > 0)
		{
			fwrite(buff, 1, len, fpW);	// 쓰기
			
			if (ferror(fpW))
			{
				perror("파일 쓰기 에러1");
				fcloseall();
				return;
			}
		}
	}

	while (!feof(fpR2))	// 두번째 파일이 끝날 때까지
	{
		len = fread(buff, 1, FILEREAD, fpR2);	// 1바이트씩 읽어서
		if (ferror(fpR2))
		{
			perror("파일 읽기 에러2");
			fcloseall();
			return;
		}

		if (len > 0)
		{
			fwrite(buff, 1, len, fpW);	// 쓰기
			if (ferror(fpW))
			{
				perror("파일 쓰기 에러2");
				fcloseall();
				return;
			}
		}
	}

	fcloseall();	// 개방파일 모두 종료

	puts("파일이 성공적으로 합쳐졌습니다.");
}

 


Result :

Desc :

 

 


Source Code :

#include <stdio.h>

void main()
{
	FILE *fpR, *fpW;
	char buff;
	int len;

	fpR = fopen("C:\\Users\\w4135\\source\\repos\\test.bin","rb");

	if (fpR == NULL)	// 개방에러 시 
	{
		perror("파일 읽기 개방 에러");
		return;	// 종료
	}

	fpW = fopen("C:\\Users\\w4135\\source\\repos\\test.bin", "w+b");

	if (fpW == NULL)	// 개방 에러시
	{
		perror("파일 쓰기 개방 에러");
		fclose(fpR);
		return;	// 종료
	}

	while (!feof(fpR))	// 파일의 끝이 아닌 동안
	{
		len = fread(&buff, 1, 1, fpR);	// 버퍼에 한 바이트 읽기 --> len == 1
		
		if (ferror(fpR))	// 읽기 에러시 종료
		{
			perror("파일 읽기 에러");
			fcloseall();
			return;
		}

		if (len > 0)	//	len <= 0 이면 파일 끝에 도달한 것
		{
			fwrite(&buff, 1, 1,fpW);	//  버퍼에 읽은 값을 그대로 쓴다

			if (ferror(fpW))	// 쓰기 에러시 종료
			{
				perror("파일 쓰기 에러");
				fcloseall();
				return;
			}
		}
	}

	fcloseall();	// 개방된 모든 파일 종료

	puts("파일을 성공적으로 복사하였습니다.");
}

 


Result :

+ Recent posts