JC Tailor

블로그 이미지
컴퓨터를 사랑하자.~
dkcjs3

Article Category

분류 전체보기 (52)
프로그램방법론 (0)
Tailor 이야기 (0)
C언어 이야기 (49)
C++ 이야기 (1)
API 이야기 (0)
MFC 이야기 (0)
Window XP 이야기 (0)
컴퓨터정보 (1)
나의 삶 이야기 (1)
UNIX (0)

Recent Comment

Recent Trackback

Calendar

«   2007/08   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

Archive

  • Total24,765
  • Today0
  • Yesterday3
  1. 2007.08.06
    time.h 함수 설명 ~
  2. 2007.08.03
    저수준의 화일 입출력
  3. 2007.08.03
    tmpnam();
  4. 2007.08.01
    memset()

#include < time.h >

/*
clock_t clock( void )
 // 프로그램이 실행된 이후부터 경과된 시간에 대해 최대 근사치를 반환한다

double difftime( time_t t1 , time_t t2 ) ;
 // 두 개의 시간 사이의 차이 ( 즉 t1 - t2 )를 초단위로 반환한다

time_t mktime( struct tm * tmptr )
 // tmptr이 가리키는 tm 타입의 구조체의 시간을 달력 시간으로 반환한다

time_t time( time_t *ptr  );
 // 달력 시간을 반환하고, ptr이 NULL이 아닐 경우네는 ptr이 가리키는 위치에도 달력 시간을 대입한다 .

char * acstime( const struct tm *tmptr ) ;
 // tmptr이 가리키는 구조체의 시간을 "Thu Feb 25 10:00:00 2005\n\0" 형태의 문자열로 변환하고 그걸 가리키는 포인터는 반환한다

char *ctime( const time_t *ptr);
 // ptr이 가리키는 달력시간을 현재 시간(local time)으로 변환하고 그 결과를
 // 다시 asctime()의 결과와 같은 문자열 표기법으로 변환하여 가리킨다.

struct tm * gmtime( const time_t *ptr );
 // ptr이 가리키는 달력시간을 tm구조체의 분리된 시간으로 변환하는데,
 // 세계협정시로 표현하고, 그 구조체를 가리키는 포인터는 반환한다

sturct tm *localtime( const time_t *ptr ) ;
 // ptr이 가리키는 달력 시간을 지역 시간의 tm구조체로 변환하고 그 구조체를 가리키는 포인터는 반환한다.

size_t strftime(char *restrict  s , size_t max , const char *restrict fmt , const struct tm * restrict tptr  );
 // 문자열 fmt를 문자열 s로 복사하는데, fmt안에 있는 서식 지정자를 fmt가 가리키는 분리된 시간 구조체로 교체한다.
 // 최대 max개의 문자가 s로 복사되며, NULL문자를 제외한 복사된 문자의 개수를 반환한다.

 

// strcut_tm 구조체의 변수들

struct tm
{
int tm_sec;  // 초
int tm_min;  // 분
int tm_hour; // 자정을 기준으로 한 시간 ( 0~ 23)
int tm_mday; // 월의 일 (0 - 31 )
int tm_mon;  // 1월부터 나타낸 월 0 - 11
int tm_year; // 1900년부터의 년도
int tm_wday; // 일요일부터 시작하는 요일의 값( 0 - 6 )
int tm_yday; // 1월 1일부터 시간한 년의 일( 0 - 365 )
int tm_isdst; // 썸머타임 ( 0보다 크면 현재 썸머타임이 진행중이라는 것 )
}

  */

//━━━ 예  제 ━━━

void main()
{
 struct tm today;
 time_t tt;

 time(&tt);
 today = *localtime(&tt);

 printf("## 현재 날짜와 시간 ## \n" ) ;
 printf("%d년 " , today.tm_year + 1900 );
 printf("%d월 " , today.tm_mon+1 );
 printf("%d일 " , today.tm_mday ) ;
 printf("%d시 " , today.tm_hour ) ;
 printf("%d분 " , today.tm_min  ) ;
 printf("%d초 \n" , today.tm_sec ) ;

}

신고
Trackback 0 and Comment 0
저수준의 화일 입출력에서는 FILE이란 구조 대신 간단하게 각 화일마다 번호를 사용하는데, 이를 화일 식별자(file descriptor), 또는 핸들(handle)이라고 합니다. 이 핸들은 0 이상의 값을 가지고 있는데 실제로 0과 1, 2 는 고정된 의미(핸들 0은 표준 입력을 위한 번호이며 1은 표준 출력, 그리고 2는 표준 에러로 사용)를 갖고 있어서 화일을 처음 열게 되면 그 화일의 핸들은 3이 됩니다.
핸들의 의미는 이후에 win32 프로그래밍 강좌를 할 때 자세히 다루기로 하고 여기서는 그냥 화일 구별할 수 있는 식별자 정도로 이해 하시면 됩니다.

저수준의 화일 입출력에서도 화일을 사용하기 위해서는 화일을 먼저 열어야 하며, 이때 다음과 같이 open 함수를 사용합니다.
        int fd;
        fd = open("화일 이름", 액세스 방식[, 모드]);

위에서 [ ]는 역시 생략할 수 있는 부분을 의미하며, 화일 이름은 fopen과 같이 열 화일의 이름이고 액세스 방식은 이 화일을 어떻게 열 것인가인데, fopen과는 달리 다음과 같은 형태로 사용합니다.

-----------------------------------------------------------
   모드            값                                     내  용
-----------------------------------------------------------
O_RDONLY    0x0001   읽기 전용으로 화일을 엽니다.
O_WRONLY    0x0002   쓰기 전용으로 화일을 엽니다.
O_RDWR        0x0004   읽고 쓰기 위해 화일을 엽니다.
O_CREAT       0x0100  화일이 없을 경우 새로운 화일을 만듭니다.
O_TRUNC       0x0200  현재 있는 화일의 내용을 0으로(제거) 합니다.
O_EXCL         0x0400   O_CREAT과 함께 사용하며,
                                  화일이 없을 경우에만 엽니다.
O_APPEND     0x0800   화일을 쓰기용으로 열고 화일 포인터를
                                   화일의 끝에 위치시킵니다.
O_TEXT         0x4000   화일을 텍스트 형식으로 엽니다.
O_BINARY      0x8000   화일을 이진 형식으로 엽니다.
-----------------------------------------------------------

위의 O_로 시작하는 것들은 모두 상수로 이의 정의는 fcntl.h(이것은 file control의 약자)에 들어 있기 때문에 include 문을 사용하려면 반드시 fcntl.h를 포함하여야 합니다.
위의 것들은 액세스 방식의 한 조건들로 여러 개를 동시에 같이 사용할 수 있으며 이 때에는 각 조건들을 '|'(비트 연산자 OR)를 이용해서 묶으면 됩니다.
data.dat 란 화일을 읽기 전용으로 열고자 할 때에는 다음과 같이 하면 됩니다.
        fd = open("data.dat", O_RDONLY);

그리고 기존의 화일이 있으며, 이를 지우고 쓰기 전용으로 열 때에는 다음과 같이 하면 됩니다.
        fd = open("data.dat", O_WRONLY | O_TRUNC);

O_TRUNC이 추가 되었는데, 만약 이를 써 주지 않으면 쓰기 전용이라도 화일의 내용은 없어지지 않습니다. 반면에 화일의 끝에 추가하고자 할 때에는 다음과 같이 O_APPEND를 써 주면 됩니다.
        fd = open("data.dat", O_WRONLY | O_APPEND);

fopen 문과 다른 것은 해당 화일이 없는 경우 화일이 만들어지지 않는다는 것입니다. 만약 화일이 없을 때 화일을 만들도록 하고 싶으면 다음과 같이 O_CREAT를 지정하여야 하며, 이 때에는 세번재 인자가 필요합니다.
        fd = open("data.dat", O_WRONLY | O_CREAT | O_TRUNC, 모드);
                    /*  화일이 있으면 그 내용을 지우고 없으면 생성, fopen의 "w"와 같음  */
        fd = open("data.dat", O_WRONLY | O_CREAT | O_APPEND, 모드);
                  /*  화일이 있으면 그 끝으로 이동하고 없으면 생성, fopen의 "a"와 같음  */

세번째 인자인 모드에는 액세스 방식에서 O_CREAT 플래그가 지정된 경우, sys\stat.h(TC의 경우)에 정의되어 있는 다음 기호 중 하나가 사용됩니다(일반적으로 8진수 0700을 주면 됩니다).
        S_IWRITE               /*  써 넣기 가능  */
        S_IREAD                /*  읽어 내기 가능  */
        S_IREAD | S_IWRITE     /*  읽기 / 쓰기 가능  */

읽기용 화일에서는 모드를 생략해도 화일의 사용에는 별 지장이 없습니다.

그밖에 O_RDWR은 읽고 쓰고자 할 때 사용하며 O_EXCL은 O_CREAT하고만 같이 사용하는데, 지정한 화일이 있으면 에러가 납니다. 즉 화일이 없는 상태에서 새로 만들고자 할 때에는 O_EXCL과 O_CREAT를 같이 사용하면 됩니다.
신고
Trackback 0 and Comment 0

사용자 삽입 이미지


신고
Trackback 0 and Comment 0

memset()

 : 메모리 블록의 모든 바이트를 특정한 값으로 초기화.

/*

 주의점 : c 가 int 형이면서도 char 형으로 처리된다는 것. memset()을 사용하여

             int, float, double 형의 배열을 0이 아닌 다른 값으로 초기화 하는데는

             쓸모가 없지만, 모든 배열 요소를 0의 값으로 초기화 할 수는 있다.

*/


_ 이하, MSDN _

Sets buffers to a specified character.

Required Header : or

void *memset( void *dest, int c, size_t count );

Parameters

dest
Pointer to destination ( 메모리블록을 가리킴 )
c
Character to set  ( 설정할 값 )
count
Number of characters ( dest에서 시작하여 설정될 바이트의 개수 )

Libraries

All versions of the C run-time libraries.

Return Values

memset returns the value of dest.

Remarks

The memset function sets the first count bytes of dest to the character c.

Example

/* MEMSET.C: This program uses memset to
 * set the first four bytes of buffer to "*".
 */

#include 
#include 

void main( void )
{
   char buffer[] = "This is a test of the memset function";

   printf( "Before: %s\n", buffer );
   memset( buffer, '*', 4 );
   printf( "After:  %s\n", buffer );
}

Output

Before: This is a test of the memset function
After:  **** is a test of the memset function
신고
Trackback 0 and Comment 0

Tag Cloud


티스토리 툴바