-
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페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.

-
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


목차
Ⅰ. C Promgram
Ⅱ. 데이터 유형
Ⅲ. 기본 입출력
Ⅳ. 연산자
Ⅴ. 제어구조와 루프
Ⅵ. 함수와 메모리 유형
Ⅶ. 포인터
Ⅷ. 배열
Ⅸ. 구조 데이터 유형
Ⅹ. 전처리기(PREPROCESSOR)
화일 입출력
Ⅱ. 데이터 유형
Ⅲ. 기본 입출력
Ⅳ. 연산자
Ⅴ. 제어구조와 루프
Ⅵ. 함수와 메모리 유형
Ⅶ. 포인터
Ⅷ. 배열
Ⅸ. 구조 데이터 유형
Ⅹ. 전처리기(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
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
키워드
추천자료
Visual C++6.0으로 배우는 C언어 제5부-배열변수와 연산자(5/7)
[8051][졸업작품]디지털원격도어록 [AT89C2051_2개]
[8051][졸업작품]리모콘로봇 적외선센서[AT89C2051 2개]
cyclic prefix에 대한 C언어 소스분석
이진탐색트리를 만들고 삽입과 삭제 연산을 하는 c프로그램
CRC(cyclic redundancy check) 기본 설명 및 C 를 이용한 소스 구현
해밍코드 프로젝트 발표(c언어)
Rip,Ospf,C언어로 구현 및 소스,주석 포함
[수치해석]C언어를 이용한 최소제곱회귀분석법
컴퓨터 알고리즘 - c프로그램 알고리즘[코딩 및 출력결과]
[프로그래밍] 자료구조 스택큐 C언어 코딩
[물리보고서] R,L,C 흐름길의 특성 - 직류, 교류 및 껴울림 특성