PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2010/10/24 20:25:27
Name 깨비
Subject c/c++ 파일 입출력 질문입니다.
안녕하세요,

c/c++로 어떤 도형을 simplify하는 프로그램을 짜고 있는데요. (research에 쓰일 프로그램입니다)

a 라는 파일을 읽어서 헤더는 그냥 두고,
데이타 부분을 메모리로 읽은 다음 simplify하고,
a 파일 헤더 뒷부분부터 쓰도록 프로그램을 만들어야 합니다.

fopen(,"r+")로 열어서 작업했는데 문제는 데이타가 줄었는데도 파일 크기는 변하지 않는다는 겁니다...
이것저것 찾아보니 r+로 열면 원래 파일을 유지한채 수정해서 원래 파일의 뒷부분이 그냥 남아있는 것 같은데,
이럴 경우 파일 크기를 줄일 수 있는 방법이 없나요?
처음엔 입출력 파일을 따로 만들려고 했는데, 한 파일에서 작업하라고 하네요;

그리고 vc++에는 SetEndOfFile 이라는 함수가 있다고 나오는데,
안타깝게도 리눅스에서 gcc/g++로 컴파일해야 합니다;

방법이 없으면 truncate을 system call로 해야 할 것 같은데,
뭔가 깔끔하지 않아 보이고, truncate가 어디서나 실행되는 명령어인지도 모르겠어서 망설여지네요...

답변 부탁드립니다!

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
레필리아
10/10/24 21:02
수정 아이콘
질문만 봐도 저보다 실력이 좋으신 분 같지만 혹시나 싶어서 댓글 남겨봅니다.
SetEndOfFile 이란 함수도 처음 보는데.. 아마 EOF 를 만들어주는 함수 같네요.
그렇다면 그냥 EOF를 원하는 위치에 써 주시면 되지 않을까요??
문정동김씨
10/10/24 22:39
수정 아이콘
그냥 파일 지우고 다시 생성하면 안되나요? [m]
지구사랑
10/10/24 22:37
수정 아이콘
제대로 파악하신 듯 합니다. 원하시는 기능이 표준적인 기능이 아니기에 OS에 따라 구현이 달라지고, 그리 깔끔하지는 않은 듯 합니다. 말씀하신 대로 SetEndOfFile()과 truncate()를 사용하라고 하네요. 제가 찾아본 걸로는,

It is an OS-dependent feature.
In the Unix world, use truncate():
<a href=http://linux.die.net/man/2/truncate
target=_blank>http://linux.die.net/man/2/truncate
</a>
In the Windows world, use SetEndOfFile():
<a href=http://www.google.com/search?btnI=1&q=msdn+SetEndOfFile
target=_blank>http://www.google.com/search?btnI=1&q=msdn+SetEndOfFile
</a>
Both techniques require gaining an OS file handle and dinking with the file that way. If you wish to do this, I would write a function that takes a file name and a new size that does it.

라고 (비슷한 질문에 대한) 대답을 적어 놓았네요.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
93705 낙동강 살리기 사업에 대한 찬반논쟁에대해서 질문합니다. 내가콩이라니1307 10/10/24 1307
93704 지금 디자이어를 사도 될까요? [4] WestSide1691 10/10/24 1691
93703 bgm 제목 알고 싶습니다(swf 자동재생) [1] 라뱅1405 10/10/24 1405
93701 c/c++ 파일 입출력 질문입니다. [7] 깨비1734 10/10/24 1734
93700 이번 토요일에 나온 씨네21 776호 사신 분~ 불같은 강속구1276 10/10/24 1276
93699 아이폰으로 pgr21 만족스럽게 하고 계신가요?(갤스도 궁금하네요.) [20] 고등어3마리1888 10/10/24 1888
93698 빛과 양자역학에 관한 질문입니다(이중슬릿질문) [3] 고마유1517 10/10/24 1517
93697 회사에서 국민연금이 5달밀렸더군요 [3] 파일롯토2104 10/10/24 2104
93696 크아하시는분있나요? 시세좀.... [3] PGR끊고싶다2240 10/10/24 2240
93695 노트북이 안꺼집니다.... 王天君1294 10/10/24 1294
93693 싸이월드 질문입니다. [2] 허느님맙소사1524 10/10/24 1524
93692 이번 블리즈컨 8강 장재호 vs 그루비 경기 VOD가 있나요? [2] kama1525 10/10/24 1525
93691 허각 우승상금 2억이면 세금은 얼마일까요? [8] [KIA]윤석민2690 10/10/24 2690
93690 스2 프로토스 4차관 정석 빌드좀 알려주세요~ [5] Dizzy1566 10/10/24 1566
93688 공유기로 인한 스타방 문제 질문입니다. [3] run to you1681 10/10/24 1681
93687 한글이 안써집니다. 도와주세요. [10] FernandoTorres1671 10/10/24 1671
93686 안드로이드폰 주소록 질문입니다. [3] 포포탄1449 10/10/24 1449
93685 컴퓨터 견적질문입니다. [8] 초보교사1579 10/10/24 1579
93684 티비를 사려고 하는데 HD와 Full HD의 차이가 뭘까요? [7] 가만히 손을 잡으1818 10/10/24 1818
93682 아르마니폰 반응속도좀... [3] -Aka1721 10/10/24 1721
93681 책 추천해주세요 [1] 라우르1540 10/10/24 1540
93680 스타2 비매너도 신고해서 아이디 정지 가능한지요... [2] 언데드네버다2158 10/10/24 2158
93679 일본인의 일반적인 독도에 대한 견해는? [3] Cand1748 10/10/24 1748
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로