연재 완료/C Lang 예제코드 모음

14. clang_ex_posix

라이피 (Lypi) 2019. 4. 8. 10:15
반응형
//open.cpp : 콘솔 응용 프로그램의 진입점을 정의합니다.

//POSIX(포직스)는 이식 가능 운영 체제 인터페이스(portable operating system interface)의 약자로
//서로 다른 UNIX OS의 공통 API를 정리하여 
//이식성이 높은 유닉스 응용 프로그램을 개발하기 위한 목적으로 IEEE가 책정한 어플리케이션 인터페이스 규격이다.

#include 
#include  //  
#include 
#include 
#include 
#include  // _wopen io.h or wchar.h

int main(int argc, char* argv[])
{
	int fd1, fd2;
	char buf[BUFSIZ];
	int n;

	if (argc != 3) {
		fprintf(stderr, "USAGE : %s SourceFile ObjectFile\n", argv[0]);
		return 1;
	}

	_sopen_s(&fd1, argv[1], O_RDONLY | O_BINARY, _SH_DENYNO, S_IREAD | S_IWRITE);

	if (fd1 < 0) {
		fprintf(stderr, "Error : cannot open %s\n", argv[1]);
		return 2;
	}

	_sopen_s(&fd2, argv[2], O_WRONLY | O_TRUNC | O_CREAT | O_BINARY, _SH_DENYNO ,S_IREAD | S_IWRITE);

	if (fd2 < 0) {
		fprintf(stderr, "Error : cannot create %s\n", argv[2]);
		return 2;
	}

	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);
}
반응형