엄마표 교촌치킨 만들어 먹기

 

 

한동안~ 교촌치킨이 아주 붐이였죠~~

요즘..치킨 시켜 먹은지. 꽤 되었는데~~ 간장양념의 짭짤하고 달달한 교촌치킨 맛이 생각나~

주말 간식으로 만들어본 교촌치킨 따라하기! 이웃님들에게 소개해드리려구요~~!!

 

요즘 치킨한마리 시켜먹어도 꽤 비싸잖아요~!!

저렴한 가격으로 집에서 깨끗하게 만들어먹는 교촌치킨!! 자 시작해볼까요?^^

 

 

 

 

 

색깔이 얼추 비슷하죠?~~ 맛은 더 기가 막히답니당~~

( 내가 만들고 너무 자화자찬하신다 ㅋㅋㅋㅋ)

 

재료: 닭1팩. 우유200MlL, 소금.후추 약간. 전분가루 한컵.

 

 

 

 

 

 

마트에서 잘 손질된 닭봉 두팩을 구입해서~ 네명이 아주 포식하였지요~!!

원래는 닭봉1팩. 윙1팩. 구입해서 만들려고했는데~ 윙이 다 떨어져서.. 봉으로만

 

물에 한번 씻어서~~ 볼에 넣고. 우유에 30분정도 담가주세요~

(닭요리할때~ 닭의  비린내를 제거하고, 육질을 더 부드럽게 하기 위해서~ 우유에 재웠다 하는거 다 아시죠?^^)

 

 

 

 

 

우유에 재운 닭을 물에 깨끗히 씻어서~  간이 잘 베도록, 살이 잘 익도록 칼집을 두군데 내주세요~!!

 

볼에 손질된 닭을 넣고, 소금 1/2 작은술. 후추 솔솔 뿌려서 잘 섞이게 하신다음.

 

 

 

  


전분 2/3컵 ( 종이컵으로 )을 넣어서 잘 섞어주세요~!!

 

고루 잘 섞이게 한다음 접시에 전분 1/3 컵 정도를  담고.

 전분에 버무려진 닭을 하나씩 탁탁 털어가면서 다시 고루고루 묻혀주세요~~~

 

전분가루 묻혀서 바로 튀기면,  가루가 날려서 기름이 뿌옇게 되거든요~~

전분가루가 닭살에 잘 스미도록, 한10분정도후  튀겨주세요~~~!!

 

 

 

 

 

 양념: 식용유 2큰술. 진간장 6큰술. 물 6큰술. 미림 3큰술. 굴소스2큰술. 레몬즙1큰술. 물엿2큰술. 설탕1큰술.

다진마늘2큰술. 건고추 5개.

 

 

여기서잠깐!!   

간장양념 치킨이니만큼.. 간장의 맛이 중요할것같은데요~

마트에가면. 꽤 여러종류의 간장이 있고, 간장의 종류도 다양하고. 가격대도 다양해서.

무엇을 사야할지. 고민한적이 참 많았던거같아요~~ 같은 진간장이라도, 가격대도 천차 만별이구요~

너무 싸면 안좋을것같고, 또 비싸면 비싼대로 간장이 다 거기서 거기겠지. 왜이렇게비싸지? 하고. 망설였던 기억이 나는데요~

 

진간장은 원래  오래 묵은 재래식 간장으로,  오래 묵을수록. 색깔이 진해지고,

짠맛은 줄고. 단맛이 생기고 맛이 좋아지기때문에  진한간장이라는 의미로 진간장이라고 불리었다고 해요~

 

그러나 요즘 마트에서 판매되고 있는 대부분의 진간장은 만드는데 1주일도 채 안걸리는

화학간장(산분해간장)과 양조간장의 혼합으로,  숙성과정이 없기 때문에 인위적으로 진한 색깔을 내려고, 카라멜 색소두 들어가구요~

값싸게 만들려고 방부제(합성보존료)도 사용한다고 합니당... 그래서 가격도 저렴한거였구요~!!

이웃나라 일본에서는 현재 이런 화학간장(산분해간장)이 일부 산업용으로만 만들어진다고해요~

 

간장의 종류도 많고, 어떤음식에 어떤용도로 사용해야할지  궁금해서.

가장 궁금했떤. 양조간장과 진간장의 차이에 대해서 지식인도 찾아보고 여기저기 찾아보았는데요~~!!

 

양조간장은 6개월이상 발효 숙성 시킨 간장이라서  단기간에 제조하는 진간장보다

만들기가 어렵고. 비용이 많이 들기때문에 가격은 비싸지만. 

일반 진간장보다  숙성기간이 길어진 만큼. 맛이 깊고 맛이 좋은 고급간장이라네요~

같은 용도로 사용해도 무방하지만, 간장 사용량이 적은  무침이나, 양념장등에 사용하면 적합할거같아요~

 

무심코 먹던. 간장에도 이렇게 깊은 뜻이~~~!!

앞으로는 간장 하나를 사더라도, 제품 후면에 표기된 첨가물등을 꼼꼼히 살펴보고 구입해야겠어여~!

 

저는 요즘 자연숙성간장을 사용하고 있는데요~~

 단기간에 여러 첨가물을 넣고 만든 화학간장이 아니라,  이름그대로 자연숙성시킨 간장이라

가격은 조금 비싸지만.. 믿고 먹을수 있구요~ 덜 짜면서도 깊이 있는 맛을 내는 간장인거같아요~

 

 

 

 

 

짭짤하고 달달한 간장양념에~ 매콤한 맛을 더하기 위해~ 마른 건고추 5개를 넣어주었어여~

어슷어슷 썰어서 준비해주시구요~!!

(더 매콤한거 원하시면 청양고추도 첨가해주세요)

 

 

 

 

 

달궈진 팬에~ 기름 2큰술을 두르고 다진마늘 2큰술과 건고추를 넣고

향을 내면서 볶아주세요~~!!

 

 

 

 

 

어느정도 볶아지면  진간장 6큰술. 굴소스2큰술. 설탕 1. 물엿2. 미림 3. 물 6. 레몬즙1.

을 넣고. 바글바글 끓여주세요~~! (레몬즙없으면 식초로 대체해주시구요)

 

약간 졸인듯한 느낌으로. 너무 멀겋지 않게~ 너무 끈끈하지도 않게~

적당히. 졸여주세요!

 

 

 

 

 

어느정도 졸여지면, 체에 받쳐서 고추와 고추씨. 마늘을 걸러내서

간장소스만 남게 해주세요~~~!

 

 

 

 

 

완성된 교촌치킨의~ 간장양념이예요~~~~!!!

 

  

 

 

 

이제 닭튀길 차례!

전분가루가 어느정도~~ 가루 날림 없이 닭살에 스며져있는 상태가 되면.

달궈진 기름에~~~전분가루를 넣어서, 바로 올라오면  닭을 넣어주세요~~ 

 

전분가루가~ 충분히 잘 입혀져서 그런지.. 기름하나 튀지않고~ 잘 튀겨집니다.

한 2분정도. 충분히 익혀주신다음. 키친타올 위로 건져서 기름을  빼주시구요~

 

 

 

 

모든 튀김은 두번 튀겨야 바삭하고 맛잇죠?

위에 노릇노릇한 색은 2번튀긴닭.

밑에 허연색은 1번튀긴닭.

 

 

 

 

 

노릇노릇하게~ 바삭바삭하게~ 두번튀겨준 닭이예요~ㅎㅎ

 

 

 

 

준비된 소스에~~ 잘 튀겨진 닭을 넣어서 버무려 주세요~~~!!

소스가 너무 많아서. 자작 자작 졸여지는 느낌이 아니라

버무려주는 느낌으로~ 한번 양념을 발라준다는 느낌이예요

 

 

소스의 농도가 중요한거같아요~~ 너무 묽지도, 너무 걸죽하지도 않은상태로요~~

 

 

 

 

요렇게 잘 섞어서~~ 소스가 튀긴닭에 고루고루 잘 묻혀지도록 버무려 주시구요~~~!!!

너무 오래 담그지도 마시구요~~ 눅눅해질수있으니. 바삭함을 고대로 살릴수 있도록 살짝 버무려주세요~

 

 

 

 

짜안~~~ 간장소스 닭튀김 완성이예요^^

 

 

 

 

교촌이랑 맛도 모양도 흡사하네요~~~

바삭함이 고대로 유지되서 바삭바삭하면서도. 간장양념이 잘 어우러져서.

짭짤하면서도 달콤하구요~~~  정말 맛있어용^^

 

 

 

 

 

이건~ 두번째 팩으로 만들어본. 닭강정!!

 

똑같은 비율의 소스에~ 물엿2큰술. 설탕 1큰술씩을 더 넣고 졸여주었떠니. 찐뜩찐득한 소스가 만들어져서

튀긴닭을 넣고 버무려 주었더니~ 색도 더 진하고, 찐득찐득한 닭강정이 만들어졌어여~~!!

 

  

 

 

 

 

첫번째 시도는 정말 교촌과 완전 흡사한 교촌치킨이였구요~

두번째 시도는 달콤한 간장소스 닭강정이였습니다~~

이웃님들 취향껏 맛있게 만들어드시면 될거같아요~~~!!

 

요즘 닭한마리 시켜도 가격이 많이 비싼데~ 집에서 만들어먹으면. 만드는 번거로움은 있으나,

저렴한 가격으로 푸짐하게, 맛있게, 깨끗하게 먹을수 있는거같아요~~

가족들이~ 맛있게 드시면. 그게 또 요리하는사람의 행복이지요^^

앞으론,  치킨시켜 먹을일 없을거같아요ㅎㅎㅎㅎ




원본 자료 : http://cafe.daum.net/happy-bank/I2RM/115

Posted by 두장

[대한민국 베스트 촬영지 55]

01 파란 하늘, 뭉게구름, 푸른초원 - 대관령 양떼목장 

02 세상에서 팔자 좋은 사람 되어보기 - 남해 금산 보리암 

03 상상과 기대를 저버리지 않는 풍경 - 통영 소매물도 

04 커피 한 잔으로도 충분히 여유로운 - 원당 종마공원 

05 마음과 숨을 더 크게 고르며 걷는 길 - 부안 내소사 전나무길 

06 사진이 주는 행복한 풍경 - 고창 청보리밭 학원농장 

07 월출산을 병풍삼아 아늑하게 자리한 - 영암 월출산 녹차 밭 

08 싸움 구경보다 더 보고 싶은 풍경 - 보성 대한1다원 

09 진한 녹색 풍경을 담는 그리움 - 보성 대한2다원 

10 달빛 머금은 냇물은 산 밖으로 흘러간다 - 순천 송광사 

11 오붓하고 정감 가득한 산사 - 선암사 

12 왜 가냐고? 묻지 말고 그냥 가야하는 - 순천만 

13 세월을 담아 세월을 닮은 동그란 돌 - 완도 정도리 구계등 몽돌 

14 시골길의 푸근함을 간직한 섬 - 완도 청산도 

15 환상과 로맨틱을 꿈꾸는 다리 - 여수 돌산대교 

16 물안개속 신비로운 풍경 - 여수 무슬목 

17 높은 곳에서 넓게 보기 - 여수 금오산 향일암 

18 섬에서 섬으로 - 제주 우도 

19 새벽 상쾌한 풍경이 기다리는 - 제주 성산일출봉 

20 아쉬움과 설레임의 장소 - 제주 섭지코지 

21 운해를 뚫고 솟아오른 두 봉우리 - 진안 마이산 

22 물안개 낀 정취로 공허한 마음을 채우다 - 임실 옥정호 

23 숲으로 가자, 숲에서 보자 - 함양 상림 

24 넓고 푸른 대지 위에 두 그루 소나무 - 하동 악양 평사리 

25 간월암이 곧 섬이요, 섬이 곧 간월암인 - 서산 간월도 

26 자연과 조화롭게 디자인한 길 - 함양 지안재 

27 새벽마다 장엄한 풍경이 연출되는 - 지리산 노고단 일출 

28 파란 하늘, 하얀 구름, 일렁이는 바람 - 서울 하늘공원 

29 말 그대로 가보면 아는 곳 - 동해 추암 해변 

30 새벽마다 환상적인 모습을 뽐내는 - 청송 주산지 

31 도심 속 행복한 낭만 공간 - 서울 올림픽공원 

32 현대적 건물들에 둘러싸여 이채로운 - 서울 봉은사 야경 

33 환상 속의 무지개다리를 만나는 꿈 - 서울 선유도 

34 동그란 물돌이의 정겨움이 함께하는 곳 - 영월 선돌 

35 세월의 아쉬움을 사진에 담다 - 인천 소래포구 

36 성벽의 부드러운 선 너머 펼쳐지는 세상 풍경 - 담양 금성산성 

37 숲에서 만나는 나무 그리고 길 - 월정사 전나무길 

38 바람 속에 마음을 날리는 곳 - 대관령 삼양목장 

39 새벽과 해질녘이면 신비로운 - 창녕 우포늪 

40 굽이굽이 흐르는 아름다운 풍경 - 예천 회룡포 

41 벗과 함께 드넓은 세상 바라보기 - 상주 경천대 

42 자연과 인간이 만들어낸 걸작품 - 사천 창선 삼천포 대교 

43 한반도에서 가장 먼저 해가 뜨는 곳 - 포항 호미곶 

44 따뜻한 정과, 삶이 배어있는 마을 - 남해 다랭이 마을 

45 마음에 미소가 넓게 퍼지는 - 담양 메타세쿼이아 가로수길 

46 푸른 대나무의 기상을 마음에 가득 담는 - 담양 죽녹원 

47 마음도 발짓도 여유로운 팔자걸음 - 담양 소쇄원 

48 신라 천년의 풍경을 품은 곳 - 경주 남산 용장사터 5층석탑 

49 언젠가 꼭 한 번 보고 싶었던 - 경주 삼릉 소나무숲 

50 신비로움 가득 풍기는 최고의 일출 촬영지 - 경주 대왕암 

51 넉넉하고 여유로운 마음이 솟는 공간 - 안동 병산서원 

52 하회마을이 한 눈에 들어오는 - 하회마을 부용대 

53 장산에 올라 감상하는 부산 최고 야경 - 부산 광안대교 야경 

54 두 개의 물이 만나 한강을 만드는 곳 - 양평 두물머리 

55 사랑이 이루어지는 아름다운 섬 - 신안 비금도

Posted by 두장

  • 사진 잘 나오는 궁극의 타이밍
  • 글=김성윤 기자 gourmet@chosun.com 
    사진=김승완 기자 wanfoto@chosun.com 
    입력시간 : 2008.10.23 09:02

    • 사진을 묘사하는 가장 흔한 말은 '빛의 예술'이란 표현이다. 이 말은 결국 사진가는 피사체가 아니라, 빛과 싸워야 한다는 말과도 같다. 

      김태영(36)씨보다 더 절실하게 '빛과의 싸움'을 하는 사람도 많지 않다. 김씨는 '타짜' '국경의 남쪽' 등 무수한 영화와 CF에 꼭 맞는 촬영지를 찾아내는 로케이션 매니저(location manager)란 직업을 갖고 있다.
    • ▲ 08:30_ 물안개가 충분히 피어올랐다. 물을 뚫고 올라온 나무 그림자가 물 위에 선명하게 투영된다. 신비롭기까지 하다. 단풍의 알록달록한 색감이 또렷하게 살았다.
    • "'○○동 ○○빌딩' 하면 아침 해가 빌딩의 어느 지점에 어떤 모양의 빛을 드리우는지, 석양이 어떤 각도로 어떤 색깔을 드리울지 머리에 떠오를 정도"라는 김태영씨는 "똑같은 장소라도 언제 어떤 빛을 받느냐에 따라 느낌이 완전히 달라진다"고 했다.

      "같은 사람이라도 아침과 저녁 느낌이 달라요. 아침의 약간 푸르스름한 빛을 받은 얼굴을 한 사람이 입김을 '후~후~' 불면 '힘내라, 파이팅' 하는 분위기가 나죠. 저녁 석양을 받으면 로맨틱하게 변하잖아요. 술도 한 잔 해야 할 것 같고." 김씨는 "빛의 미묘한 차이를 잡아내야 좋은 사진"이라고 말한다. 그는 장소나 상황에 따라 달라지겠지만, 일반적으로 4개 등급으로 나눌 수 있다고 했다.

    • ▲ 06:00_ 주왕산 국립공원 주산지. 해 뜨기 직전. 너무 어둡다. 나뭇잎의 질감이 살아나지 않고, 물안개도 피어오르지 않는다.
    •  

    • ▲ 07:50_ 해 뜬 직후. 산속이라 그런지 여전히 어둡지만 1과 비교하면 훨씬 밝다. 단풍 색깔이 선명하게 표현된다. 물안개가 피어오르기 시작했다.
    • ▲ 08:14_ 또 다른 각도에서 촬영한 주산지. 햇살이 대각선으로 숲을 침투한다. 나뭇잎이 역광 속에서 신선하게 빛난다.
    • ▲ 13:30_ 정오를 1시간30분 넘겼지만, 해가 여전히 높다. 하늘 꼭대기에서 균일하게 떨어지는 햇빛은 콘트라스트와 질감을 충분히 살리지 못한다. 사진이 밋밋하다.
    • ▲ (위/아래)17:00·17:25_ 해가 충분히 기울었다. 비스듬히 들어오는 햇살 덕분에 5와 비교해 질감이 훨씬 도드라진 사진이다. 하지만 너무 어둡다. 산속이라 해가 일찍 진다. 물안개도 없다.

    • ● 빛 1등급
      _ 가장 찍기 좋은 빛. 해가 뜬 직후, 또는 지기 전 길게 누웠을 때이다. '매직 아워(magic hour)'라고도 한다. 그림자가 길게 늘어지고, 밝은 부분과 어두운 부분의 대비(콘트라스트)가 커져서 감정을 살릴 수 있다. 요즘(10월 23일 현재)은 오전 6시 20분부터 7시까지, 오후 4시에서 5시 30분 정도. 일출 직전이나 일몰 직후도 좋다. 해가 뜨기 직전 하늘과 구름이 푸르스름하거나, 해가 지기 직전 불그스름한 기운이 돌 때 느낌이 아주 좋다. 

      ● 빛 2등급_ 오전 9~11시. '베스트'는 아니나 무난하다. 이것저것 찍을 수 있다. 

      ● 빛 3등급_ 오후 2~4시. 역시 빛이 무난하다. 화면을 구성하고 카메라 장비를 세팅하고, 연기자들이 감정을 잡으면서 매직 아워를 기다리기도 한다.

      ● 빛 4등급_ 정오. CF나 영화 계통에서는 '중꼬'라는 일본말 속어로 통한다. 햇빛이 균일하게 떨어지기 때문에 대비감이나 드라마틱한 느낌이 없다.

      "1등급 중에서도 '1++' 등급을 꼽을 수 있을까요? 한우 쇠고기처럼요." 

      "일출 직후, 20분 내 없어지는 극히 짧은 빛이에요. 햇살이 사물에 닿기도 전, 주변 사물을 볼 수는 있지만 콘트라스트는 없는, 차분하게 가라앉은 느낌이 기가 막혀요." 
       


      => [화보] 한국의 아름다운 호수 여행
      => [화보] 삶의 여유를 찾아 떠나는 펜션여행
      => [화보] 삶의 여유로운 시간속으로~ 까페여행

      원본 자료 : http://spn.chosun.com/site/data/html_dir/2007/10/31/2007103100310.html

Posted by 두장

  만약 우리가 프로그래밍을 해서 C 프로그램을 만들었다고 하자. 우리는 대부분 Visual Studio 를 이용하거나, GCC 를 통해 컴파일 할 것이다. 하지만 이는 모두 그 컴파일러를 다운받아서 사용해야 한다는 단점이 있는데 인터넷 상에서 컴파일 해 실행할 수 있는 사이트가 있다.
  바로 codepad.org 이다. 이 사이트는  C , C++ , D , Haskell , Lua , OCaml , PHP , Perl, Python, Ruby , Scheme, Tcl 과 같은 언어들에 대한 무료 컴파일러/인터프리터 를 제공해준다. 인터넷에 올려진 무료 컴파일러/인터프리터가 쉽게 제작되는 것은 아니다. 왜냐하면 이 컴파일러/인터프리터는 무한 while 문 이라던지, 스스로를 파괴하는 명령문들로 부터 철저하게 대비를 해야만 사이트가 유지될 수 있기 때문이다. 또한 보안을 위해서cin 이나 scanf 와 같은 사용자로 부터 입력을 받아들이는 함수들도 봉쇄되고 있다. 
  따라서 긴 코딩을 하기에는 별로 적합하지 않다. 그렇지만 짧은 프로그램이나 잠시 테스트 할 것이 있는 것 등을 하기 위해서는 이용하기 적합한 것 같다. 하지만 궁금한 것이 하나 있는데, C 의 포인터를 이요할 때, 그 포인터가 가리키는 메모리는 어느 메모리를 가리키는 것일까? 사용자의 컴퓨터의 메모리? 또는 codepad.org 의 서버 컴퓨터 메모리인지. 참 궁금할 따름이다. 
Posted by 두장
2008. 10. 31. 16:03

 

11.1 표준 입·출력 함수

표준 입·출력 함수는 자료의 기록, 판독에 대하여 다음과 같이 4가지 방법을 사용한다.

① 키보드로부터 자료를 읽어서 화면에 자료를 나타내는 방법으로 한 번에 한문자만을기록, 판독하는 방법

(예: getchar(), getc(), getch(),putchar(), putc(), putch())

② 키보드에서 문자열을 읽어서 화면에 문자열을 나타내주는 방법

(예: gets(), puts())

③ 문자, 문자열, 부동 소수점, 정수 등을 혼합하여 형식화된 자료를 기록하거나 판독하는 방법

(예: fscanf(), fprintf())

④ 레코드 또는 블록 형식을 이용하여 자료의 기록 및 판독을 행하는 방법 등이 있다.이중 2가지 방법은 이미 배운바 있으나 정리하면서     간략히 설명하고 3,4번째 방법에대해 자세히 기술한다.

단일 문자 입·출력

■ 입 력

키보드로부터 1문자를 입력하는 형식은 다음과 같다.

 

getchar()

getch()

getc(화일 포인터)

 

getchar(), getch(), getc() 함수의 사용 방법은 동일하나 getch() 함수는 화면에 문자가 나타나지 않으며 getc() 함수는 인수로서 읽고 쓸 화일의 이름을 꼭 밝혀 주어야 한다.

■ 출 력

1 문자를 화면에 출력하는 형식은 다음과 같다.

 

putchar()

putch()

putc(문자, 화일 포인터)

 

putchar(), putch(), putc() 함수의 사용 방법은 동일하나, putchar(), putch() 함수는 화면에서 출력만으로 사용하며 putc() 함수는 화일 포인터에 문자를 저장할 수 있다.

 

 [예제 11-1] putchar() 함수 사용 방법

 #include <stdio.h>

void main()

     {

         char ch;

         while((ch = getchar()) != '\r')

         putchar(ch);

     }

 TurboC example

TurboC example

 

 

[예제 11-2] putch() 함수 사용 방법  

#include <stdio.h>

void main()

    {

        char ch;

        while((ch = getch()) != '\r')

        putch(ch);

    }

TurboC example 

 

 

[예제 11-3] getc(), putc() 함수 사용 방법  

 #include <stdio.h>

void main()

     {

          char ch;

          while((ch = getc(stdin)) != '\r')

          putc(ch,stdout);

     }

TurboC example

TurboC example 

 

 

문자열의 입·출력

문자열의 입·출력에 대한 형식은 다음과 같다.

 

gets(문자열)

puts(문자열)

 

gets() 함수는 표준 입력 장치(스트림 입력 장치라고도 함)으로부터 문자열을 입력으로 받아들여 문자열에 대한 포인터를 반환하는 함수이다 이때 주의할 점은 문자열 버퍼의 끝에 NULL('\0')이 자동적으로 부가되어 저장되므로 입력의 문자 수보다 적어도 하나 이상의 저장공간이 확보되어야 한다. puts() 함수는 표준 출력 장치로 문자열을 보내는 함수이다. 이 함수는 printf()의 제어지시를 이용하여 문자열을 간단히 출력할 수 있으므로 잘 사용하지 않는다.

 

[예제 11-4]  

#include <stdio.h>

void main()

     {

          char string[80];

          printf("Input a string:");

          gets(string);

          puts(string);

     }  

Input a string:This is sample string

This is sample string 

 

 

11.2 화일의 개방과 종결

본 절에서는 보조 기억장치를 이용한 화일의 기록, 판독에 대한 초기 과정, 화일의 개방과 종결에 대해 기술한다.

화일의 개방

화일은 보조 기억장치에서 읽어오거나 보조 기억장치로 기억시키기 위해서는 화일을 개방하여야 한다. 화일을 개방하기 위해서는 화일이름을 읽을 것인지 기억 시킬것인지를 운영체제에 정보를 제공해 주어야 한다. 운영 체제는 보조 기억장치(주로 디스크 장치 이용)에서 정보를 읽을 것인지 또는 기억할 것인지에 대한 정보를 포인터로써 돌려주게 된다. 따라서 개방되는 화일은 구조체를 가지게 된다.

화일 구조체는 자료 버퍼의 현재 크기와 위치 등의 화일에 관한 정보를 포함하며 반드시 #include <stdio.h> 할 필요가 있다.

프로그램에서 화일 구조체에 대한 포인터형의 변수 선언과 화일을 개방하는 문장은 다음과 같다.

예)#include <stdio.h>

FILE *fp;

fp=fopen("kim.dat","w");

여기서 *fp는 포인터 화일 변수이며 fopen() 함수는 fp변수에 저장된 화일 구조체에 대한 포인터를 돌려준다. 개방 화일은 "kim.dat"이며 화일에 자료를 기록하라는 의미가 "w"이다.

<stdio.h> 화일에 미리 정의되어 개방되는 스트림은 다음과 같다.

 

이 름

장 치

모 드

stdin

stdout

stderr

stdaux

stdprn

표준 입력 장치(키보드)

표준 출력 장치(화면)

표준 에러 장치(화면)

표준 보조 장치(직렬 포트)

표준 출력 장치(병렬 프린터)

텍스트 모드

텍스트 모드

텍스트 모드

2 진 모드

2 진 모드

 

FILE 구조체에 대한 포인터형의 변수와 화일의 개방함수 fopen()에 대해 생각해 보자. fopen() 함수의 목적은 입·출력 동작을 하기 위해 화일을 개방하는데 사용되며 형식은 다음과 같다.

 

FILE *fopen(화일명, 접근 모드)

 

여기서 접근 모드는 개방하고자 하는 화일의 모드를 결정하는 문자열을 말하며 다음과 같은 사용 모드를 제공하고 있다.

 

분 류

접근 모드

접근 내용

읽 기

r

읽기 전용으로 기존의 화일을 개방

쓰 기

w

a

쓰기 전용으로 새로운 화일을 생성

추가로 쓰기 위해 화일을 개방

갱 신

r+

w+

a+

갱신을 위해 기존의 화일을 개방

갱신을 위해 새로운 화일을 생성

갱신을 위해 화일의 끝에 개방

2진 모드

"rb", "wb", "ab"

"r+b" 또는 "rb+"

"r+a" 또는 "ra+"

2진 화일에 대해 r,w,a 기능 수행

2진 화일에 대해 r+ 기능 수행

2진 화일에 대해 a+ 기능 수행

 

화일 닫기 화일을 개방하여 그 화일에 대한 기록과 판독이 끝나면 그 화일을 닫아야만 한다. 화일을 닫는 형식은 다음과 같다.

 

fclose(화일 포인터)

11.3 화일 입·출력 함수

이 절에서는 화일의 기록과 판독에 따른 입·출력 형식에 대해 기술한다.

문자 단위 화일 입·출력 함수

일단 화일을 개방하면 디스크에 기록시키거나 디스크에서 화일의 내용을 읽어올 수가 있다. 문자 단위 화일 입·출력 형식은 다음과 같다.

 

fgetc(화일 포인터)

fputc(문자, 화일 포인터)

 

 

[예제 11-5] fputc() 함수를 이용하여 화일에 출력하는 프로그램  

 #include <stdio.h>

void main()

     {

          FILE *fp;

          char ch;

          fp=fopen("kim.dat","w");

          while((ch=getch()) != '\r') {

               putch(ch);

               fputc(ch,fp);

          }

          fclose(fp);

     }

"kim.dat"화일에는 키보드를 통해서 입력된 문자가 저장된다. 

 

 

[예제 11-6] fgetc() 함수를 이용하여 화일에 있는 내용을 화면에 출력하는 프로그램  

#include <stdio.h>

void main(void)

     {

          FILE *fp;

          char string[] = "This is a test";

          char ch;

          if((fp=fopen("kim.dat", "r")) == NULL) {

               printf("\n File not found");

               exit(-1);

          }

          do

          {

               ch = fgetc(fp);

               putch(ch);

          } while (ch != EOF);

          fclose(fp);

     }

"kim.dat" 화일에 있는 내용이 화면에 출력된다.

만약 "kim.dat"라는 화일이 없으면

"File not found" 라는 메시지가 출력된다.

  

 

  문자열의 화일 입·출력 함수

화일에서 문자열을 판독하거나 화일 문자열을 기록하는 형식은 다음과 같다.

 

fgets(문자열, 최대 길이, 화일 포인터)

fputs(문자열, 최대 길이 화일 포인터)

 

fgets() 함수는 화일 포인터로부터 입력행을 읽어 문자 배열에 저장하고 현재 위치로부터 한 레코드 또는 (최대 길이-1)개의 문자가 읽혀지면 개행문자를 만나면 끝낸다. 마지막 문자가 정상적으로 읽혀지면 NULL('\n')을 추가시키며 화일의 끝이거나 에러이면 NULL을 반환한다.

fputs() 함수는 화일 포인터가 지시하는 화일에 문자열을 기록하라는 것을 의미하며 정상이면 0을 화일의 끝이거나 에러이면 EOF(-1)을 반환한다.

 

[예제 11-7] fgets(), fputs() 함수 사용 방법  

#include <stdio.h>

void main()

     {

          FILE *fp,*fp1;

          char string[30];

          fp=fopen("kim1.dat","w");

          fp1=fopen("kim.dat","r");

          while(fgets(string,30,fp1) != NULL)

          fputs(string,fp);

          fclose(fp);

          fclose(fp1);

}

c:>type kim.dat

Jim Botton, sportscaster and author of Ball Four, on

the reception to his book : "Pete rose would screen at

me from dugout because I resealed too much. Now he's

posing in magazine ads in his underwear.

   

 

 

"kim1.dat" 화일에는 "kim.dat"화일에 있는 내용과 동일하다.

형식화된 화일 입·출력 함수

지금가지 문자와 텍스트를 화일에 기록하거나 판독하는 것을 다루었다. 여기서는 수치 자료를 다루기 위해서 형식화된 입·출력 함수에 대해 설명한다. 형식화된 입·출력 함수에 대한 다음과 같다.

 

fscanf(화일 포인터, 제어문자열, 인수)

fprintf(화일 포인터, 제어문자열, 인수)

 

fscanf() 함수fprinf() 함수는 화일 포인터를 제외하고는 scanf() 함수와 fprintf() 함수와 동일하다. fscanf() 함수는 화일로 부터 지정된 형태로 읽어들여 뒤에 오는 인수에 대입하고 화일의 끝이거나 에러가 발생하면 EOF를 반환하고 그렇지 않을 경우에는 입력된 항목의 수 를 반환한다.

fprintf() 함수는 지정된 형태를 화일에 출력하고 화일에 쓰여진 문자의 수를 반환하고 에러가 생길 경우에는 음수(-)의 값을 반환한다.

 

[예제 11-8] 성적을 저장하는 프로그램  

#include <stdio.h>

void main()

     {

          FILE *fp;

          char name[20];

          int number;

          int kor;

          int eng;

          int math;

          int total;

          int i=0;

          fp=fopen("grade.dat","w");

          do {

               printf("Enter name, number, Kor, Eng, Math : ");

               scanf("%s %d %d %d %d",name, &number, &kor, &eng,                          &math);

               total=kor+eng+math;

               fprintf(fp,"\n%s %d %d %d %d %d",name, number, kor, eng,

                         math, total);

               i++;

          } while(i <4);

          fclose(fp);

     }

Enter name, number, Kor, Eng, Math : kim 1 57 87 45

Enter name, number, Kor, Eng, Math : kim1 2 67 45 76

Enter name, number, Kor, Eng, Math : kim2 3 76 45 95

Enter name, number, Kor, Eng, Math : kim3 4 67 45 87

c:>type grade.dat

kim 1 57 87 45 189

kim1 2 67 45 76 188

kim2 3 76 45 95 216

kim3 4 67 45 87 199 

 

 

[예제 11-9] 성적이 있는 화일을 읽어서 화면에 출력하는 프로그램  

 #include <stdio.h>

void main()

     {

          FILE *fp;

          char filename[15];

          char name[20];

          int number;

          int kor;

          int eng;

          int math;

          int total;

          printf("Enter name of a file to open foe WRITING : ");

          gets(filename);

          if((fp=fopen(filename,"r")) == NULL) {

               printf("\n File not found");

               exit(-1);

          }

          printf("\n Name Number KOR ENG MATH TOTAL");

          do {

               fscanf(fp,"%s %d %d %d %d %d",name, &number, &kor,

                         &eng, &math, \&total);

               printf("\n %-10s%3d %3d %3d %3d %3d", name, number, kor,                          eng, math,total);

          } while(!feof(fp));

          fclose(fp);

     }

Enter name of a file to open foe WRITING : grade.dat

Name Number KOR ENG MATH TOTAL

kim 1 57 87 45 189

kim1 2 67 45 76 188

kim2 3 76 45 67 216

kim3 4 67 45 87 199 

 

 만일 "grade.dat"라는 화일이 없으면 "File not found"라는 메시지가 출력된다.

레코드 단위의 화일 입·출력 함수

형식화된 화일 입·출력 함수는 각 숫자가 문자로서 저장되기 때문에 디스크의 공간을 많이 차지하게 된다.

또한 배열이나 구조체 같은 복잡한 자료 형을 읽거나 기록할 때 직접적인 방법이 없다.

배열을 한 번에 배열 요소 하나를 저장하기 때문에 비 효율적이며 구조체는 여러 부분으로 나누어서 저장해야 한다.

이러한 문제점을 해결하는 것이 레코드 단위의 입·출력이다. 레코드 단위의 입·출력은 수치를 정수형은 2바이트,

실수형은(부동 소수점형)은 4바이트를 2진 형식으로 쓰기 때문에 메모리를 효율적으로 이용할 수가 있다.

한꺼번에 많은 자료를 취급할 수가 있으며 배열, 구조체, 배열의 구조체, 그리고 다른 자료 구조를 단일 문장으로 사용할 수가 있다.

형식은 다음과 같다.

 

fwrite(문자열, 크기, 항목수, 화일 포인터)

fread(문자열, 크기, 항목수, 화일 포인터)

 

fwrite() 함수는 지정된 갯수 만큼의 자료를 화일에 저장하며 fread() 함수는 주어진 화일 로부터 지정된 갯수만큼의 자료를 읽어서 문자열에 저장한다.

 

[예제 11-10] fwrite() 함수를 이용한 프로그램  

#include <stdio.h>

void main()

     {

          struct {

               char name[20];

               int number;

               float height;

          } man;

          FILE *fp;

          float dummy=0.0;

          if((fp=fopen("kim.dat","wb")) == NULL) {

               printf("\n File not found");

               exit(-1);

          }

          do {

               printf("\n Enter name : ");

               gets(man.name);

               printf(" Enter number : ");

               scanf("%d",&man.number);

               printf(" Enter height : ");

               scanf("%f",&man.height);

               fflush(stdin);

               fwrite(&man, sizeof(man),1,fp);

               printf("Add another man(y/n) ?");

          } while(getch() == 'y');

          fclose(fp);

     }

Enter name : kim1

Enter number : 1

Enter height : 34.83

Add another man(y/n) ?

Enter name : kim2

Enter number : 2

Enter height : 67.56

Add another man(y/n) ? y

Enter name : kim3

Enter number : 3

Enter height : 84.54

Add another man(y/n) ? n 

 

 

[예제 11-11] fread() 함수을 이용한프로그램  

#include <stdio.h>

#include <stdlib.h>

void main()

     {

          struct {

               char name[20];

               int number;

               float height;

          } man;

          FILE *fp;

          fp=fopen("kim.dat","rb");

          while(1) {

               fread(&man, sizeof(man), 1, fp);

               if(feof(fp)) {

                    fclose(fp);

                    exit(-1);

               }

               printf("\n Name : %s", man.name);

               printf("\n Numer : %d", man.number);

               printf("\n Height : %4.2f",man.height);

           };

     }

Name : kim1

Number : 1

height : 34.83

Name : kim2

Number :2

height : 67.56

Name : kim3

Number : 3

height : 84.54  

 

 여기서 feof() 함수는 화일의 끝을 검사하는 함수이며 화일 포인터가 가리키고 있는 화일이 모두다 판독되면 ZERO(0)가 아닌 값을 반환하고 그렇지 않으면 0을 반환한다.

exit(n) 함수는 프로그램의 실행중 중도에 끝내고 싶을 때 이용되는 함수이며 n은 0이 아니어야 프로그램의 수행을 종료하는 함수이다.

화일 포인터의 제어 함수

이제가지의 순차화일에 비해 다소 조작 방법이 복잡하지만 어디서든지 읽고 쓰기 가능한 방식은 "랜덤화일처리"라고 하며, 랜덤화일처리에서 어느 부분을 읽을 것인지를 지정할 수 있는데 이를 수행하는 함수가 fseek() 이다.

fseek() 함수는 화일의 위치를 자유로이 지정하는 함수로서 다음과 같은 형식을 갖는다.

 

fssek(화일 포인터, 변위, 기준 점)

 

화일 포인터의 화일 위치를 기준점을 기준으로 하여 변위 바이트만큼 이동하여 정상시는 0, 오류시는 0 이외의 값을 반환한다.

이때 기준점의 위치 설정에 따라 3가지로 나누며 이에 대한 상수 및 의미는 표 11-3과 같다.

 

상 수

실 제 값

의 미

SEEK_SET

SEEK_CUR

SEEK_END

0

1

2

화일의 처음

현재 화일 포인터의 위치

화일끝 검출 위치

 

한 편 fseek() 이외의 랜덤 처리계 함수 및 기능은 표 11-4와 같은 종류가 있다.

 

함수명

기 능

fflush

fgetpos

fsetpos

ftell

rewind

버퍼에 넣으려는 전체의 문자를 화일에 씀

화일 위치의 정보를 읽음

화일 포인터의 위치 설정

현제의 화일 위치 파악

화일의 위치를 선두로 이동

 

 

[예제 11-12] fseek() 함수를 사용한 프로그램  

#include <stdio.h>

#include <stdlib.h>

void main()

     {

          struct {

               char name[20];

               int number;

               float height;

          } man;

          FILE *fp;

          int rec_no;

          long int offset;

          fp=fopen("kim.dat","rb");

          printf("Enter record number : ");

          scanf("%d",&rec_no);

          offset=(rec_no-1) * sizeof(man);

          if(fseek(fp,offset,SEEK_SET)) {

               printf("\n Can't move pointer there.");

               exit(-1);

          }

          fread(&man, sizeof(man), 1, fp);

          printf("\n Name : %s", man.name);

          printf("\n Numer : %d", man.number);

          printf("\n height : %f",man.height);

          fclose(fp);

      }

Enter record number : 2

Name : kim2

Numer : 2

height : 67.55998 

 

 

11.4 메모리 할당

지금까지 다루어온 자료의 저장 방법은 표준 변수들을 사용하여 기억 장소를 미리 확보하여 확보된 영역에서의 자료의 저장 방법을 다루었다.

예를 들어 배열 선언에서 100개의 원소를 취하는 배열을 확보하고 5개의 원소만을 취한다면 95개의 원소는 빈 공간으로 남아 기억 공간이 낭비가 된다.

이 절에서는 자료의 크기가 동적으로 변할때 메모리의 확대가 가능한 메모리 할당 에 대하여 기술한다. c언어에서는 malloc() 함수를 제공하여 처리하고 있다. malloc() 함수의 사용 형식은 다음과 같다.

 

malloc(arg)

 

여기서 arg는 메모리의 바이트를 표시하는 양의 정수이며 새로운 메모리의 블럭 시작점에 대한 포인터를 반환한다.

 

[예제 11-12] malloc() 함수를 이용한 프로그램  

#include <string.h>

#include <stdio.h>

void main()

     {

          char temp_string;

          temp_string=(cahr *) malloc(100);

          strcpy(temp_string,"Hello Kang");

          printf("Enter string : ");

          fgets(temp_string,100,stdin);

          printf("Your input string is %s",temp_string);

     }

Hello Kang

Enter string : Good morning !

Your input string is Good morning !

 

 

다음 표 11.5는 표준 입·출력 함수에 대하여 총괄적인 의미를 보인 것이다.

 

함 수 명

형 식

의 미

getc(fp)

getc(fp)

FILE *fp;

fp가 가르키는 화일로부터 한 문자 입력

putc(c,fp)

putc(c,fp)

int c;

FILE *fp;

fp가 가르키는 화일로 한 문자 출력

fgetc(fp)

fgetc(c)

int c;

fp가 가르키는 화일로부터 한 문자 입력

fputc(c,fp)

fputc(c,fp)

int c;

FILE *fp;

fp가 가르키는 화일로 한 문자 출력

fgtes(s,n,fp)

fgtes(s,n,fp)

char *s;

int n;

FILE *fp;

화일 fp에 최대 n바이트의 문자열 s를 입력

fputs(s,fp)

fputs(s,fp)

char *s;

FILE *fp;

화일 fp에 문자열 s를 출력

fprintf(fp,format,인수)

fprints(fp,format,인수)

FILE *fp;

char *format;

화일 fp에 지정된 형태 format에 따라 출력

fscanf(fp,format,인수)

fscanf(fp,format,인수)

FILE *fp;

char *format;

화일 fp에서 지정된 형태 format에 따라 입력

fread(s,n,item,fp)

fread(s,n,item,fp)

char *s;

int n;

int item;

FILE *fp;

화일 fp에서 지정된 갯수 만큼의 데이타를 읽어 문자 열 s에 입력

 

 

연 습 문 제

 

[문제 11-1] 화일을 읽어서 대문자는 소문자로 소문자는 대문자로 변환하는 프로그램  

#include <stdio.h>

void main()

     {

          int ch;

          FILE *fp, *fp;

          char filename1[13], filename2[13];

          printf("\n Input filename : ");

          gets(filename1);

          fp=fopen(filename1,"r");

          printf(" Output filename : ");

          gets(filename2);

          fp1=fopen(filename2,"w");

          while((ch=fgetc(fp)) != EOF) {

               if(ch >= 'A' &&ch <='Z')

                    fputc(ch + 32, fp1);

               else if(ch >= 'a' &&ch <='z')

                    fputc(ch-32,fp1);

               else

                    fputc(ch,fp1);

          }

     }

Input filename : in_letter.dat

Output filename : out_letter.dat

c:>type in_letter.dat

Jim Botton, sportscaster and author of Ball Four, on

the reception to his book : "Pete rose would screan at

me from dugout because I recealed too much. Now he's

posing in magazine ads in his underwear.

c:>type out_letter.dat

jIM bOTTON, SPORTSCASTER AND AUTHOR OF bALL fOUR, ON

THE RECEPTION TO HIS BOOK : "pETE ROSE WOULD SCREAN AT

ME FROM DUGOUT BECAUSE i RECEALED TOO MUCH. nOW HE'S

POSING IN MAGAZINE ADS IN HIS UNDERWEAR.

 

 

 

[학습 11-1]  

#include <stdio.h>

void main()

     {

          int ch;

          int i=0;

          char string[100];

          printf("\n Input string : ");

          gets(string);

          do {

               ch=string[i];

               if(ch >= 'A' &&ch <='Z')

                    putchar(ch + 32);

               else if(ch >= 'a' &&ch <='z')

                    putchar(ch-32);

               else

                    putchar(ch);

               i++;

           } while(string[i] != '\0');

     }

Input String : This is Sample Text

tHIS IS sAMPLE tEXT  

 

 

[문제 11-2] 레코드 단위 입·출력 함수를 이용하여 봉급을 계산하는 프로그램  

#include <stdio.h>

#include <string.h>

struct{

     char depart[4];

     char name[20];

     int day;

     float pay;

}work_pay;

void main()

     {

          char numstr[20], flag;

          float money=30000;

          FILE *fp;

          if((fp=fopen("work_pay.rec","ab"))==NULL)

          fp=fopen("work_pay.rec","wb");

          do{

               printf("\nEnter department : ");

               gets(work_pay.depart);

               printf("Enter name : ");

               gets(work_pay.name);

               printf("Enter How much day : ");

               gets(numstr);

               work_pay.day=atoi(numstr);

               work_pay.pay=money * (float)work_pay.day;

               printf("\nPayment per day : %f",money);

               printf("\nTotal Payment:%f",work_pay.pay);

               fwrite(&work_pay,sizeof(work_pay),1,fp);

               printf("\n\nContinue (Y/N)...");

               flag=getche();

          }while(flag != 'N' &&flag != 'n');

          fclose(fp);

     }

Enter department : 3

Enter name : Kang jae sik

Enter how much day : 34

 

Payment per day : 30000.00000

Total Payment : 1020000.00000

Continue (Y/N)...

결과는 "work_pay.rec"라는 화일에 2진 정보로 저장된다.

 

 

[문제 11-3] 화일에 있는 문자의 수를 출력  

 #include <stdio.h>

#include <string.h>

void main(int argc, char *argv[])

     {

          FILE *fp;

          char string[81];

          char filename[13];

          int count=0;

          strcpy(filename,argv[1]);

          if(argc != 2) {

               printf("\n Input filename : ");

               gets(filename);

          }

          if((fp=fopen(filename,"r")) == NULL) {

               printf("\n File not found");

               exit(-1);

          }

          while(getc(fp) != EOF)

          count++;

          printf("\n File <%s >contains %d characters",filename,count);

          fclose(fp);

     }

 Input file name : exam.dat

File <exam.dat >contains 444 characters

 

 

[문제 11-4] 임의의 화일을 읽어서 행을 두 배로 확장하는 프로그램  

#include <stdio.h>

#include <string.h>

void main(int argc, char *argv[])

     {

          FILE *in_fp, *out_fp;

          char in_filename[13], out_filename[13];

          strcpy(in_filename,argv[1]);

          strcpy(out_filename,argv[2]);

          if(argc <3) {

               printf("\n Input filename : ");

               gets(in_filename);

               printf(" Output filename : ");

               gets(out_filename);

          }

          in_fp=fopen(in_filename,"r");

          out_fp=fopen(out_filename,"w");

          double_space(in_fp, out_fp);

          fclose(in_fp);

          fclose(out_fp);

     }

double_space(in_p, out_p)

FILE *in_p, *out_p;

     {

          int c;

          while((c=getc(in_p)) != EOF) {

               putc(c,out_p);

               if(c == '\n')

                    putc('\n',out_p);

          }

     }

 Input filename : in.dat

Output filename : out.dat

c:>type in.dat

This is

a

sample

file

c:>type out.dat

This is

a

sample

file 

 

 

[학습 11-2] 화일의 개행문자를 무시하여 화일의 내용을 한 줄로 길게 늘리는 프로그램  

#include <stdio.h>

#include <string.h>

void main(int argc, char *argv[])

     {

          FILE *in_fp, *out_fp;

          char in_filename[13], out_filename[13];

          strcpy(in_filename,argv[1]);

          strcpy(out_filename,argv[2]);

          if(argc <3) {

               printf("\n Input filename : ");

               gets(in_filename);

               printf(" Output filename : ");

               gets(out_filename);

          }

          in_fp=fopen(in_filename,"r");

          out_fp=fopen(out_filename,"w");

          double_space(in_fp, out_fp);

          fclose(in_fp);

          fclose(out_fp);

     }

double_space(in_p, out_p)

FILE *in_p, *out_p;

     {

          int c;

          while((c=getc(in_p)) != EOF) {

               if(c == '\n')

                    putc(' ',out_p);

               else

                    putc(c,out_p);

          }

     }

Input filename : in.dat

Output filename : out.dat

c:>type in.dat

This is

a

sample

file

c:>type out.dat

This is a sample file  

 

 

[문제 11-5] 화일에 'A'부터 'Z'까지의 문자를 저장하고 해당 위치에 있는 문자를 출력  

 #include <stdio.h>

void main()

     {

          FILE *fp;

          int ch;

          int num;

          char filename[13];

          printf("\n Input file name : ");

          gets(filename);

          fp=fopen(filename,"w");

          for(ch='A'; ch<='Z'; ch++)

          putc(ch, fp);

          fclose(fp);

          if((fp=fopen(filename,"r")) == NULL) {

               printf("\n File not found");

               exit(-1);

          }

          printf(" Record Number = ");

          scanf("%d",&num);

          if(fseek(fp,num-1,0) != 0) {

               perror("Can't move pointer there.");

               exit(-1);

          }

          ch=getc(fp);

          printf("\n Record Number : %d character = %c",num,ch);

          fclose(fp);

     }

 Input file name : in.dat

Record number : 5

Record number : 5 character = e

c:>type in.dat

ABCDEFGHIJKLMNOPQRSTUVWXYZ

 

 

[문제 11-6] 화일을 복사하는 프로그램  

#include <stdio.h>

#include <string.h>

void main(int argc, char *argv[])

     {

          FILE *in_fp, *out_fp;

          char in_filename[13], out_filename[13];

          char ch;

          strcpy(in_filename, argv[1]);

          strcpy(out_filename, argv[2]);

          if(argc <3) {

               printf("\n Input file name : ");

               gets(in_filename);

               printf(" Output file name : ");

               gets(out_filename);

          }

          if((in_fp=fopen(in_filename,"r")) == NULL) {

               printf("\n %s file not found");

               exit(-1);

          }

          out_fp=fopen(out_filename,"w");

          while((ch=getc(in_fp)) != EOF)

          putc(ch, out_fp);

          fclose(in_fp);

          fclose(out_fp);

     }

Input file name : letter.dat

Output file name : letter.bak

c:>type letter.dat

Jim Botton, sportscaster and author of Ball Four, on

the reception to his book : "Pete rose would screan at

me from dugout because I recealed too much. Now he's

posing in magazine ads in his underwear.

c:>type letter.bak

Jim Botton, sportscaster and author of Ball Four, on

the reception to his book : "Pete rose would screan at

me from dugout because I recealed too much. Now he's

posing in magazine ads in his underwear.

  

 

 

[학습 11-3] 두 개의 화일을 합병하는 프로그램  

 #include <stdio.h>

#include <string.h>

#define MAX_LINE 80

void main(int argc, char *argv[])

     {

          FILE *in_fp[2], *out_fp;

          int i;

          char ch;

          char temp[MAX_LINE];

          char *in_filename[2],

          out_filename[13];

          strcpy(in_filename[0],argv[1]);

          strcpy(in_filename[1],argv[2]);

          if(argc <3) {

               for(i=0; i<2; i++) {

                    printf("Input %d-st file name : ",i+1);

                    scanf("%s",in_filename[i]);

               }

          }

          for(i=0; i<=1; i++)

          if((in_fp[i]=fopen(in_filename[i],"r")) == NULL) {

               printf("\n %s file not found",in_filename[i]);

               exit(-1);

          }

          printf("\nMerge file name : ");

          scanf("%s",out_filename);

          out_fp=fopen(out_filename,"w");

          for(i=0; i<2; i++) {

               while((ch=getc(in_fp[i])) != EOF)

               putc(ch,out_fp);

          }

          fclose(in_fp[0]);

          fclose(in_fp[1]);

          fclose(out_fp);

     }

Input 1-st file name : in1.dat

Input 2-st file nsme : in2.dat

Merge file name : out.dat

c:>type in1.dat

Jim Botton, sportscaster and author of Ball Four, on

the reception to his book : "Pete rose would screan at

c:>type in2.dat

me from dugout because I recealed too much. Now he's

posing in magazine ads in his underwear.

c:>type out.dat

Jim Botton, sportscaster and author of Ball Four, on

the reception to his book : "Pete rose would screan at

me from dugout because I recealed too much. Now he's

posing in magazine ads in his underwear. 

 

 

[문제 11-7] 화일을 dump하는 프로그램  

#include <stdio.h>

#include <string.h>

void main(int argc, char *argv[])

     {

          FILE *fp;

          int i;

          char ch;

          char buffer[17];

          char filename[13];

          strcpy(filename,argv[1]);

          if(argc <2) {

               printf("\nInput file name : ");

               scanf("%s",filename);

          }

          if((fp=fopen(filename,"r")) == NULL) {

               printf("\n %d file not found",filename);

               exit(-1);

          }

          do {

               for(i=0; i<16; i++) {

                    ch=getc(fp);

                    if(ch == EOF)

                         exit(1);

                    if(ch <31)

                         ch='.';

                    buffer[i]=ch;

                    printf("%3X",ch);

               }

               buffer[i]='\0';

               printf(" %s",buffer);

               putchar('\n');

          } while(1);

          fclose(fp);

     }

Input file name : letter.dat

20 20 20 4A 69 6D 20 42 6F 74 74 6F 6E 2C 20 73 Jim Botton, s

70 6F 72 74 73 63 61 73 74 65 72 20 61 6E 64 20 portscaster and

61 75 74 68 6F 72 20 6F 66 20 42 61 6C 6C 20 46 author of Ball F

6F 75 72 2C 20 6F 6E 2E 20 74 68 65 20 72 65 63 our, on. the rec

65 70 74 69 6F 6E 20 74 6F 20 68 69 73 20 62 6F eption to his bo

6F 6B 20 3A 20 22 50 65 74 65 20 72 6F 73 65 20 ok : "Pete rose

77 6F 75 6C 64 20 73 63 72 65 61 6E 20 61 74 2E would screan at.

20 6D 65 20 66 72 6F 6D 20 64 75 67 6F 75 74 20 me from dugout

62 65 63 61 75 73 65 20 20 49 20 72 65 63 65 61 because I recea

6C 65 64 20 74 6F 6F 20 6D 75 63 68 2E 20 4E 6F led too much. No

77 20 68 65 27 73 2E 20 70 6F 73 69 6E 67 20 69 w he's. posing i

6E 20 6D 61 67 61 7A 69 6E 65 20 61 64 73 20 69 n magazine ads i

6E 20 68 69 73 20 75 6E 64 65 72 77 65 61 72 2E n his underwear.

2E 2E  

 

 

[문제 11-8] sin함수를 화일에 출력하는 프로그램  

#include <stdio.h>

#include <math.h>

void main()

     {

          FILE *fp;

          char filename[13];

          int num,i;

          float x;

          printf("\nOutput file name : ");

          scanf("%s",filename);

          fp=fopen(filename,"w");

          num=16;

          fprintf(fp,"%d",num);

          for(i=0; i<num; i++) {

               x=sin(2*M_PI/num*i);

               fprintf(fp,"\n%f",x);

          }

     }

Output file name : sin.dat

16

0.000000

0.382683

0.707107

0.923880

1.000000

0.923880

0.707107

0.382683

0.000000

-0.382683

-0.707107

-0.923880

-1.000000

-0.923880

-0.707107

-0.382683  

 

 

[학습 11-4] 위에서 구한 화일을 그래프 형식으로 출력하기  

 #include <stdio.h>

#include <math.h>

#define MAX 100

void main()

     {

          int n;

          float x[MAX];

          file_io(&n,x);

          disp(n,x);

          sgraph(n,x);

     }

disp(int num,float array[])

     {

          int i;

          for(i=0; i<num; i++)

          printf("%d\t%f\n",i,array[i]);

     }

sgraph(int num, float array[])

     {

          int i,j,k=39;

          float fmax=0;

          for(i=0; i<num; i++) {

               if(fabs(array[i]>fmax))

               fmax=fabs(array[i]);

          }

          for(i=0; i<num; i++)

               array[i]/=fmax;

          printf("-1");string(k-2,' ');

          printf("0");string(k-2,' ');

          printf("+1\n");printf("+"); string(k-1,'-');

          printf("+"); string(k-1,'-');

          printf("+\n");

          for(i=0; i<num; i++) {

               j=array[i]*k + 0.5 + k;

               if(j>k) {string(k,' ');printf("+");

               string(j-k-1,'-');printf("*\n");

          }

          if(k==j) {

               string(k,' ');

               printf("*\n");

 

          }

          if(j<k) {

               string(j,' ');printf("*");

               string(k-j-1,'-');printf("+\n");

          }

     }

string(int x,char y)

     {

          if(x >0)

          while(x--)

          putchar(y);

     }

file_io(int *num,float array[])

     {

          FILE *fp;

          int i;

          char filename[13];

          printf("\nInput file name : ");

          scanf("%s",filename);

          if((fp=fopen(filename,"r")) == NULL) {

               printf("\n %s file not found",filename);

               exit(-1);

          }

          fscanf(fp,"%d",num);

          for(i=0; i<*num; i++)

          fscanf(fp,"%f",&array[i]);

     }

 Input file name : sin.dat

00.000000

10.382683

20.707107

30.923880

41.000000

50.923880

60.707107

70.382683

80.000000

9-0.382683

10-0.707107

11-0.923880

12-1.000000

13-0.923880

14-0.707107

15-0.382683

-1 0

+1

+--------------------------------------+--------------------------------------+

*

+--------------*

+---------------------------*

+-----------------------------------*

+--------------------------------------*

+-----------------------------------*

+---------------------------*

+--------------*

*

*--------------+

*---------------------------+

*-----------------------------------+

*--------------------------------------+

*-----------------------------------+

*---------------------------+

*--------------+

표 11.5 표준 입․출력 함수표 11.4 랜덤 처리계 함수표 11.3 기준점의 위치표 11.2 화일 접근 모드표 11.1 <stdio.h>화일의 개방 스트림

Posted by 두장

시스템 관리자들은 정기적으로 로그 파일을 체크하고 관리해야 합니다. 
리눅스에는 보안과 시스템 등에 관련된 다양한 로그 파일들이 존재하며, 주로 /var/log 디렉토리에 싸이게 됩니다. 

dmesg 
Linux가 시작될 때 나타나는 메시지들을 기록한 파일로 터미널에서 dmesg 명령을 입력하면 보여지는 내용과 동일합니다. 
주로 시스템의 구동과 종료시에 문제점이 발생하는 경우 그 원인을 체크해 볼 수 있는 중요한 파일입니다. 
/var/log/messages 를 확인해도 비슷한 내용을 볼 수 있다.

messages 
다양한 서버의 데몬이나 xinetd와 관련된 서비스를 사용할 때 기록되는 로그파일로 데몬에 문제가 발생할 경우 체크합니다. 

secure 
시스템에 로그인하거나 인증을 요하는 작업을 한 경우 기록되는 파일로 보안상 매우 중요한 로그입니다. 

lastlog 
각 사용자가 마지막으로 로그인한 날짜를 기록하고 있습니다. lastlog 명령어를 사용하여 확인할 수 있습니다. 

wtmp 
시스템에 접속한 모든 사용자의 로그를 기록하는 파일로 last, 명령어로 확인 할 수 있습니다. 

xferlog 
FTP 서비스의 엑세스를 기록하는 로그입니다. 

로그 파일의 관리에 소홀하면, 로그 파일이 계속 커져 시스템 FULL 과 같은 장애가 발생하고 
디스크에도 심각한 문제를 일으킬 수 있으므로, logrotate와 같은 프로그램으로 자동으로 로그파일을 순환시켜야 합니다.
Posted by 두장

Posted by 두장

Posted by 두장




현충사에 가따왔다....

넓직한 주차장.....
아늑한 벤치......따사로운 햇빛......

이지만 혼자갔다...버스타고.....쩝....에효...ㅜㅜ

너무 늦게 도착해서 현충사 안은 구경 못했지만 ....

꽃도 좋고..

현충사 가는길에 있는 메타세콰이어길도 멋지고....

그리고 피닉스 50.7의 회오리 보케의 아름다움을 다시한번 느꼈다..ㅋㅋ
Posted by 두장

대전에서 갑사가는 버스편이 조정이 되었다네요..

그전에는 유성 파출소 앞에서 정차했는데..

이제는 충대에서 출발하고.. 유성 버스터미널에서 정차하고

바로 갑사로 간다네요~

이번 가을에 갑사 애기단풍을 함 봐야 할텐디~~~

 

<버스 운행 시간표>

 

대전<충대> ~ 갑사

갑사~대전<충대>

07 : 50

07 : 00

09 : 30

08 : 40

11 : 20

10 : 30

13 : 10

12 : 20

15 : 30

14 : 40

17 : 10

16 : 20

19 : 00

18 : 20

Posted by 두장