low level fuction 으로 유닉스 명령어 mv를 구현하여라 ㅠㅠ

jtjtkjt의 이미지

흠...

예)./mv file1 file2

흠... ㅠㅠ
알고싶어요~
cp 까지는 구현이 가능한데 mv는 정말이지 머리가
터질것 같아요 ㅠㅠ 아무리 생각해도 답이 안나오네 ㅠㅠ
부탁합니다 ㅠㅠ

morris의 이미지

cp 하시고 rm하시면 되지 않나요?

jtjtkjt의 이미지

ㅠㅠ
잘 모르겟어요 ㅠㅠ

익명 사용자의 이미지

#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

int main()
{
    char c;
    int in, out;

    in = open(“file.in”, O_RDONLY);

    out = open(“file.out”, O_WRONLY|O_CREAT, S_IRUSR | S_IWUSR);
    while(read(in, &c, 1) ==1 )
          write(out, &c, 1);

      exit(0);
}

요렇게 까지 해서 cp 는 해봤는데

mach337의 이미지

low level function 이 무엇을 이야기 하는지 모르겠습니다만...
man 2 rename
참고가 될런지요....

morris의 이미지

man 2 unlink

해보시면 아실겁니다

참고로 이건 팁인데 해당 명령어가 어떤 시스템 콜을 쓰는지 보면

따라서 구현하기 편하죠

touch tmpfile

strace rm tmpfile

해보세요

익명 사용자의 이미지

rename()을 시도하시고

에러리턴을 봐서 다른 디바이스에 속한경우라면

cp에 썼던 코드를 사용하시고 unlink()를 호출하세요.

man 2 rename 하시면 EXDEV인가 다른 디바이스일 경우 셋팅되는 errno가 있을것입니다.

s4bz의 이미지

Anonymous wrote:
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

int main()
{
    char c;
    int in, out;

    in = open(“file.in”, O_RDONLY);

    out = open(“file.out”, O_WRONLY|O_CREAT, S_IRUSR | S_IWUSR);
    while(read(in, &c, 1) ==1 )
          write(out, &c, 1);

      exit(0);
}

요렇게 까지 해서 cp 는 해봤는데

이것을 고쳐서..(소스 무단 사용 죄송.m(__)m)
(low level function 이라는게 read랑 write를 뜻하는게 아닐까요??)

#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

#define MAX_BUF	1024

int main(int argc, char *argv[])
{
	char c;
	char buf[MAX_BUF];
	int n;
	int in, out;

	if (argc != 3) {
		fprintf("%s file_name1 file_name2", argv[0]);
		exit(1);
	}

	in = open(argv[1], O_RDONLY);
	out = open(argv[2], O_WRONLY|O_CREAT, S_IRUSR | S_IWUSR);

	while(n = read(in, buf, MAX_BUF))
		write(out, buf, n);

	close(in);
	close(out);

	remove(argv[2]); // <== 파일 삭제가 이함수인지 생각이 잘안남 -_-;

	exit(0);
}

이게 과연 돌아갈런지.-_-;

에고 낼 셤이 3개인데 공부하러 휘리리릭~

아~~

익명 사용자의 이미지

바로 윗분 가르쳐준거 조금 제 형식으로 변형을 했어요...
ㅋㅋㅋㅋ
다들 감사용 ~~