C Promgram
닫기
  • 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
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
해당 자료는 10페이지 까지만 미리보기를 제공합니다.
10페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

Ⅰ. C Promgram

Ⅱ. 데이터 유형

Ⅲ. 기본 입출력

Ⅳ. 연산자

Ⅴ. 제어구조와 루프

Ⅵ. 함수와 메모리 유형

Ⅶ. 포인터

Ⅷ. 배열

Ⅸ. 구조 데이터 유형

Ⅹ. 전처리기(PREPROCESSOR)

화일 입출력

본문내용

러가 발생한 것을 의미한다. 예를 들어 data.dat란 화일로부터 80 바이트의 데이터를 읽어들이고자 할 때에는 다음과 같이 사용한다.
int fd;
char buf[80];
int n;
fd = open(\"data.dat\", O_RDONLY);
n = (fd, buf, 80); /* 두번째 인자(buf)에 들어가는 값은 포인터이어야 한다 */
이때 n이 80이면 잘 읽은 것이고 다른 값이면 데이터가 부족하거나 뭔가 잘못된 것이다. 일반적으로 읽을 데이터의 크기는 다르지만 버퍼의 크기는 보통 고정적으로 사용하는데 stdio.h에 정의되어 있는 BUFSIZ를 사용하는 것이 관례로 되어 있다. 이 크기는 한 화일로부터 가져올 수 있는 데이터의 최적치이기 때문에 많은 양의 데이터를 읽거나 쓸 때에는 이 것을 사용하는 것이 성능을 최대한 높일 수 있다.
다음은 read 함수의 한 예로서 size file(1) ... fine(n)과 같이 사용하여 각 화일들의 크기를 계산하여 출력하는 프로그램이다.
#include
#include
main(int argc, char *argv[]) {
int fd;
long int size;
int n;
char buf[BUFSIZ];
if (argc == 1) {
fprintf(stderr,\"USAGE: %s file(1) file(2) ... file(n)\\n\",*argv);
return (0);
}
while (--argc > 0) {
if ((fd = open(*++argv, O_RDONLY | O_BINARY)) == -1) {
fprintf(stderr,\"Error: Cannot open %s\\n\",*argv);
continue;
}
size = 0l;
while ((n = read(fd, buf, BUFSIZ)) > 0)
size += n;
if (n == 0)
fprintf(stdout,\"%s: %ld bytes.\\n\",*argv,size);
else
fprintf(stderr,\"Error in reading %s\\n\",*argv);
}
close(fd); /* 핸들이 다루는 화일을 닫는다. 되돌림 값은 화일 닫기가 */
} /* 성공하면 0, 실패하면 -1의 값을 되돌린다 */
결과
---------------------------------------------------------------------------------
C:\\TC>size tc.exe tcc.exe  
tc.exe: 290249 bytes.
tcc.exe: 179917 bytes.
저수준의 화일 입출력에서 화일로부터 읽어들이는 것은 이 read 밖에 없다. 즉 문자 하나씩 밖에 읽어들이지 않기 때문에 만약 정수값을 읽어들이고자 할 때에는 읽어들인 것을 정수로 변환하여야 한다. 따라서 복잡한 포맷으로 된 데이터를 읽어들일 때에는 고수준의 화일 입출력을 사용하는 것이 좋다.
read 와 반대로 화일에 쓰고자 할 때는 다음과 같이 write이라는 함수를 사용한다.
int fd;
char *buf;
int size;
int n;
n = write(fd, buf, size);
fd는 open에 의해 넘겨 받은 화일의 핸들이며 buf는 출력할 데이터가 들어 있는 곳을 가리키는 포인터이고, size는 출력할 데이터의 크기(바이트수)를 의미한다. 즉 fd가 나타내는 화일에 size만큼의 바이트를 buf로부터 가져와 출력하라는 의미가 된다. 이때 write 함수는 실제로 쓴 바이트의 수를 계산 결과로 산출하게 된다. 이는 항상 size와 같지는 않은데, 예를 들어 디스크가 꽉차서 더 이상 쓸 공간이 없게 되면 지정한 크기 보다 적은 수를 쓰게되므로 n이 size보다 작을 수 있다. 그리고 에러가 발생한 경우에는 read와 같이 -1을 계산 결과로 산출한다.
다음은 read와 write 함수를 사용하여 한 화일을 똑같이 복사하는 프로그램이다.
#include
#include
main(int argc, char *argv[]) {
int fd1, fd2;
char buf[BUFSIZ];
int n;
if (argc != 3) {
fprintf(stderr,\"USAGE: %s sourcefile objectfile\\n\",*argv);
return (1);
}
if ((fd1 = open(*(argv+1), O_RDONLY | O_BINARY)) < 0) {
fprintf(stderr,\"Error: Cannot open %s\\n\",*(argv+1));
return (2);
}
if ((fd2 = open(*(argv+2), O_WRONLY | O_TRUNC | O_CREAT | O_BINARY, 0700)) < 0) {
fprintf(stderr,\"Error: Cannot create %s\\n\",*(argv+2));
return (3);
}
printf(\"FileCopy %s to %s\\n\\n\",*(argv+1),*(argv+2));
while ((n = read(fd1, buf, BUFSIZ)) > 0)
if (write(fd2, buf, n) != n) { /* read와 마찬가지로 저수준의 화일 입출력에서 출력 함수는 write 밖에 없다. 따라서 문자 데이터를 출력하기에는 괜찮지만 정수나 실수값을
출력하고자 할 때에는 이를 ASCII 코드 형태로, 즉 문자 형태로 변환한 다음 출력하여야
하기 때문에 그러한 경우에는 고수준의 입출력 함수를 사용하는 것이 더 편리하다 */
fprintf(stderr,\"Error in writing %s\\n\",*(argv+2));
return (4);
}
if (n < 0)
fprintf(stderr,\"Error in reading %s\\n\",*(argv+1));
close(fd1);
close(fd2);
}
결과
---------------------------------------------------------------------------------
C:\\TC>slcopy tc.exe ec.exe  
FileCopy tc.exe to ec.exe

키워드

C Promgram,   데이터,   C 언어,   함수,   루프
  • 가격500
  • 페이지수190페이지
  • 등록일2003.01.24
  • 저작시기2003.01
  • 파일형식한글(hwp)
  • 자료번호#220543
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니