SPAN class=postbody이 예제는 SPAN style=FONT-WEIGHT: bold파일의 앞부분의 지정한 크기만큼을 삭제하고 그만큼 데이터를 앞으로 당겨주는 것/SPAN입니다. br /즉, SPAN style=FONT-WEIGHT: boldLOG파일같은것을 다룰때 파일의 크기가 일정한 크기를 넘어섰을때 어떻게 빠르게 파일의 크기를 축소할수 있는지를 고민/SPAN해보자는 취지에서 만들어 본것입니다. br /br //SPAN
TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0
TBODY
TR
TDSPAN class=genmedB코드:/B/SPAN/TD/TR
TR
TD class=code/* br /nbsp; Copyright (C) Information Equipment co.,LTD br /nbsp; All rights reserved. br /nbsp; Code by JaeHyuk Cho lt;mailto:minzkn@infoeq.comgt; br /nbsp; CVSTAG=$Header$ br /*/ br /br /#if defined(WIN32) br /# include lt;io.hgt; br /# include lt;windows.hgt; br /#endif br /#include lt;sys/types.hgt; br /#include lt;stdio.hgt; br /#include lt;stdlib.hgt; br /#include lt;unistd.hgt; br /#include lt;fcntl.hgt; br /br /#if !defined(O_BINARY) br /# define O_BINARY 0 br /#endif br /#if !defined(O_LARGEFILE) br /# define O_LARGEFILE 0 br /#endif br /#define def_max_block_size ((size_t)(4 lt;lt; 10)) br /br /int main(int s_argc, char **s_argv) br /{ br /nbsp;const char *s_filename; br /nbsp;size_t s_reduce_size, s_buffer_size; br /nbsp;int s_handle; br /nbsp;void *s_buffer; br /nbsp;off_t s_roffset, s_woffset, s_filesize; br /nbsp;ssize_t s_read_bytes, s_write_bytes; br /br /nbsp;if(s_argc lt;= 2){ (void)fprintf(stdout, Usage: %s lt;filepathgt; lt;reduce_sizegt;\n, s_argv[0]); return(0); } br /nbsp;s_filename = s_argv[1], s_reduce_size = (size_t)atoi(s_argv[2]); br /nbsp;if(s_reduce_size lt;= ((size_t)0)){ (void)fprintf(stdout, invalid reduce size !\n); return(1); } br /nbsp;s_buffer_size = (s_reduce_size gt; def_max_block_size) ? def_max_block_size : s_reduce_size; /* buffer_size limit check */ br /nbsp;(void)fprintf(stdout, debug: buffer_size=%lu\n, (unsigned long)s_buffer_size); br /nbsp;s_handle = open(s_filename, O_RDWR | O_BINARY | O_LARGEFILE); br /nbsp;if(s_handle == (-1)){ (void)fprintf(stdout, can not open file ! (filename=\%s\)\n, s_filename); return(1); } br /br /nbsp;s_filesize = lseek(s_handle, (off_t)0, SEEK_END); br /nbsp;if(s_filesize != ((off_t)(-1))) br /nbsp;{ br /nbsp; s_buffer = malloc(s_buffer_size), s_roffset = (off_t)s_reduce_size, s_woffset = (off_t)0; br /nbsp; if(s_buffer != ((void *)0)) br /nbsp; { br /nbsp; nbsp;do br /nbsp; nbsp;{ br /nbsp; nbsp; if(lseek(s_handle, s_roffset, SEEK_SET) == ((off_t)(-1)))break; br /nbsp; nbsp; s_read_bytes = read(s_handle, s_buffer, s_buffer_size); br /nbsp; nbsp; if(s_read_bytes lt;= ((ssize_t)0))break; br /nbsp; nbsp; s_roffset += (off_t)s_read_bytes; br /nbsp; nbsp; if(lseek(s_handle, s_woffset, SEEK_SET) == ((off_t)(-1)))break; br /nbsp; nbsp; s_write_bytes = write(s_handle, s_buffer, (size_t)s_read_bytes); br /nbsp; nbsp; if(s_write_bytes lt;= ((ssize_t)0))break; br /nbsp; nbsp; s_woffset += (off_t)s_write_bytes; br /nbsp; nbsp;}while(1); br /nbsp; nbsp;free(s_buffer); br /#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED br /nbsp; nbsp;(void)fprintf(stdout, truncate %llu -gt; %llu bytes\n, (unsigned long long)s_filesize, (unsigned long long)s_woffset); br /nbsp; nbsp;(void)ftruncate(s_handle, s_woffset); /* POSIX */ br /#elif defined(WIN32) br /nbsp; nbsp;(void)fprintf(stdout, truncate %lu -gt; %lu bytes\n, (unsigned long)s_filesize, (unsigned long)s_woffset); br /nbsp; nbsp;(void)chsize(s_handle, s_woffset); br /#else br /# warning not supported (f)truncate | chsize br /#endif br /nbsp; } br /nbsp; else { (void)fprintf(stdout, not enough memory\n); return(1); } br /nbsp;} br /nbsp;else { (void)fprintf(stdout, seek not supported\n); return(1); } br /nbsp;(void)close(s_handle); br /br /nbsp;return(0); br /} br /br //* vim: set expandtab: */ br //* End of source *//TD/TR/TBODY/TABLE
받은 트랙백이 없고,
댓글이 없습니다.
reduce_file.tar.bz2
글
댓글을 달아 주세요
댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/133댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/133