2011-12-10 3 views
7
나는 기능을 이름을 사용하고

을 휴지통 파일 이름 바꾸기 이름 아래.한 폴더에서 다른 폴더로 파일을 이동 (우분투에서, C)를

하지만 난이하려고하면 rename("./t2.c", "~/.local/share/Trash/files/it_works.c"); 그냥 작동하지 않지만, "CD를 거치지 만 ~/.local/share/휴지통/파일/it_works.c"터미널 입력에 쓰레기통을 열 않습니다.

그래서 난 할 노력하고있어 (삭제) 빈 휴지통 파일을 이동합니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까?

+0

사용중인 OS는 무엇입니까? –

답변

9

문제는 ~는 쉘에서 작동한다는 것입니다. 전체 절대 경로 (예 : /home/user1031204/.local/...) & 다시 시도하십시오.

+0

많은 덕분에 그것이 작동 : D 조하지만 만약 내가 이것을 다른 곳에서 사용하고 싶다면? 나는 그들의 사용자 이름을 배울 필요가 있었 을까? – user1031204

+2

@ user1031204 :'getuid()'와'getpwuid_r()'을 사용하여 사용자의 홈 디렉토리를 찾을 수 있습니다 ('pw_dir'보세요). – NPE

+0

도움을 주셔서 대단히 감사합니다 !!! – user1031204

4

~은 쉘에서 사용할 수있는 편리한 바로 가기입니다. getenv("HOME")을 사용하여 유사한 동작을 수행하고 대상 디렉터리와 연결합니다.

snprintf(buffer, size_of_buffer, "%s/.local/share/Trash/files/it_works.c", 
     getenv("HOME")); 

#include <stdlib.h>에 기억하고 그 결과를 저장하기위한 적어도 PATH_MAX 바이트 길이 버퍼 ( limits.h)를 갖는다.

+0

지금 살펴 보겠습니다. 많은 감사합니다. – user1031204

+0

아무도 결과가 얼마나 오랫동안 있을지 예측할 수 없습니다. 환경 변수는 사용자가 원하는만큼의 데이터를 저장할 수 있습니다. 'snprintf'를 사용하면 최대 버퍼 크기를 알 수 있습니다. 그렇지 않으면 응용 프로그램이 스택이나 힙 오버플로에 취약합니다 (예 : $ HOME = \'perl -e 'print "A"x 4096'\'; ./your_program'. – jweyrich

+0

@jweyrich, 좋은 지적, 답변을 업데이트했습니다. – Jan

4

realpath() 여기에 도움이 될 것입니다. glob()wordexp()도보실 수 있습니다.

+0

오, 고마워, 분명히 유용 해 보입니다. D 감사합니다. – user1031204

+0

+1. 좋은 제안. – jweyrich

+0

realpath()는 물결표 기호와 함께 작동하지 않습니다. (불행히도) – timbo

관련 문제