Divide et impera.
쓰기 부분 :
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main() {
int const a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int const out { open("testnums.out",
O_WRONLY | O_CREAT, S_IWRITE | S_IREAD) };
if(out==-1) {
perror("Cannot open file");
return 1;
}
ssize_t const written { write(out, a, sizeof(a)) };
if(written<0) {
perror("Write error");
}
close(out);
return 0;
}
컴파일 및 실행 :
$ hexdump testnums.out
0000000 0001 0000 0002 0000 0003 0000 0004 0000
0000010 0005 0000 0006 0000 0007 0000 0008 0000
0000020 0009 0000 000a 0000
0000028
이 아님을 유의하시기 바랍니다을 :
$ g++ -std=c++0x -Wall -Wextra tout.cc
$ ./a.out
는 'A'배열에서 기록 이식성 - 각 컴파일러/아키텍처에는 여기에 약간의 다른 출력이있을 수 있습니다.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main() {
int const in { open("testnums.out", O_RDONLY) };
if(in==-1) {
perror("Cannot open file");
return 1;
}
int a[10];
ssize_t const r { read(in, a, sizeof(a)) };
if(r!=sizeof(a)) {
fprintf(stderr, "Could not read complete array.");
return 1;
}
if(r<0) {
perror("Read error");
close(in);
return 1;
}
close(in);
for(unsigned int i(0); i<sizeof(a)/sizeof(int); ++i) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
컴파일 및 실행 :
$ g++ -std=c++0x -Wall -Wextra tin.cc
$ ./a.out
1 2 3 4 5 6 7 8 9 10
일반 : 당신의 코드에서 작은 문제가 많이있다 (여기
는 이것을 다시 읽어 표준 출력에 기록하는 부분입니다 like : 반환 값 검사가 완전히 빠져있다. 필요한 모든 헤더 파일이 포함되어 있지 않고 잘못된 바이트 수가 기록된다 ...)
$ man 2 open
$ man 2 read
$ man 2 write
$ man 2 close
012와 같은 다른 맨 페이지를 읽고 싶을 수도있다.
어. 코드에 모든 오류 검사가 누락되었습니다. 그들을 끼워 넣으면 다른 사람들에게 무엇이 잘못되었는지를 묻지 않아도됩니다. 당신의 프로그램은 당신에게 말할 것입니다! – melpomene
보너스 문제 : 입력 파일에'int'가 10 개 포함되어 있지 않고 코드가 10'int's (10 바이트 읽음)를 읽으 려하지 않습니다. – melpomene
@melpomene 언급 한 문제를 어떻게 해결할 수 있습니까? –