시스템콜, 리눅스 프로그래밍 cp 구현

danji의 이미지

리눅스 명령어 중 cp를 구현하는 코드입니다. cygwin으로 돌려보니 자꾸 프로그램 종료가 안됩니다.
코드에서 잘못된 점이 있다면 알려주시면 감사하겠습니다

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
 
 
int main(int argc, char* argv[]) {
	int fd1,fd2;
	ssize_t nread;
	char buffer[1024];
 
	if (argc !=3) {
		fprintf(stderr, "usage : mycp file1 file2");
		exit(-1);
	}
 
	if (fd1 = open(argv[1], O_RDONLY) <0) {
		perror(argv[1]);
		exit(-1);
	}
	if (fd2 = open(argv[2], O_WRONLY | O_CREAT | O_EXCL,0644) < 0) {
		fprintf(stderr, "파일 %s가 이미 존재합니다", argv[2]);
		exit(-1);
	}
	while ((nread = read(fd1, buffer, 1024)) > 0) {
		if (write(fd2, buffer, nread) < nread) {
			break;
		}
	}
 
	close(fd1);
	close(fd2);
	return 0;
}
Stephen Kyoungwon Kim@Google의 이미지

때문입니다.

if (fd1 = open(argv[1], O_RDONLY) <0) {

이 라인에서 <가 먼저 수행되고 = 가 수행됩니다. 따라서 0 아니면 1이 들어가게 되요.

그 아래 open도 마찬가지 문제가 있습니다.

if ((fd1 = open(argv[1], O_RDONLY)) <0) {

둘다 위와 같이 괄호를 쳐주세요.