read() 함수를 사용하여 파일에서 읽기
각각 별도의 줄에 있는 숫자를 읽는 프로그램을 작성해야 합니다. 파일의 한 줄만 읽은 다음 버퍼에서 int
를 읽는 식으로 파일이 끝날 때까지 읽을 수 있습니까? 읽기 및 쓰기를 사용하는 좋은 예를 찾기가 정말 어렵습니다. 내 예제는 어느 정도 작동하지만 `n
문자를 감지 할 때까지 읽은 다음 버퍼를 int로 변환하고 싶습니다.
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <iostream>
int fd[2];
void readFile(int fd) {
unsigned char buffer[10];
int bytes_read;
int k=0;
do {
bytes_read = read(fd, buffer, 10);
k++;
for(int i=0; i<10; i++) {
printf("%c", buffer[i]);
}
}
while (bytes_read != 0);
}
int tab[50];
int main(int argc, char *argv[]) {
if(argv[1] == NULL || argv[2] == NULL) {
printf("Function requires two arguments!\nGood bye...\n");
return -1;
}
else {
if (access(argv[1], F_OK) == 0) {
fd[0] = open(argv[1], O_RDONLY);
}
else {
fd[0] = open(argv[1], O_WRONLY|O_CREAT|O_SYNC, 0700);
const int size = 50;
for(int i=0; i<size; i++) {
char buf[10];
sprintf(buf, "%d\n", i+1);
write(fd[0], buf, strlen(buf));
}
close(fd[0]);
fd[0] = open(argv[1], O_RDONLY);
if (access(argv[2], F_OK) == 0)
fd[1] = open(argv[2], O_WRONLY);
else
fd[1] = open(argv[2], O_WRONLY|O_CREAT, 0700);
}
}
if (access(argv[2], F_OK) == 0)
fd[1] = open(argv[2], O_WRONLY);
else
fd[1] = open(argv[2], O_WRONLY|O_CREAT, 0700);
readFile(fd[0]);
close(fd[0]);
close(fd[1]);
}
코드를 수정했습니다:
void readFile(int fd) {
char buffer[10];
int bytes_read;
int k = 0;
do {
char t = 0;
bytes_read = read(fd, &t, 1);
buffer[k++] = t;
printf("%c", t);
if(t == '\n' && t == '\0') {
printf("%d", atoi(buffer));
for(int i=0; i<10; i++)
buffer[i]='\0';
k = 0;
}
}
while (bytes_read != 0);
}
9
2
바이트 단위로 읽고 각 바이트가
'\n'
와 일치하는지 확인하여 일치하지 않으면버퍼
에 저장합니다. 만약'\n'
이면'\0'
을 버퍼에 추가한 다음atoi()
를 사용합니다.다음과 같이 단일 바이트를 읽을 수 있습니다.
참조
read()
여기에 이에 대한 매우 좋은 문서가 있습니다 :-
http://www.cplusplus.com/reference/cstdio/fgets/
fgets를 사용하지 않으려면 다음 방법을 사용하세요.