입력 파일을 대체 할 수 있도록 입력 파일과 출력 파일 모두에 동일한 파일 이름을 내 프로그램에 사용할 가능성을 추가하는 방법에 대해 생각합니다. ,열린 파일을 제거하는 것이 안전합니까()?
/* input == output in this case */
FILE *inf = fopen(input, "r");
remove(output);
FILE *outf = fopen(output, "w");
을 (물론 : 처리 된 파일이 상당히 크다고 할 수있다으로
, 나는 그 가장 좋은 방법은 그런 즉, 파일을 열고 다음을 제거하고 새로 만들 첫번째로 것 같아 오류 처리 추가됨)
모든 시스템에서 열려있는 파일을 제거 할 수있는 것은 아니며,이 경우 remove()
이 실패하는 한 허용됩니다.
열려있는 파일을 제거하고 그 내용을 읽지 못하게하는 시스템이 없다면 걱정됩니다.
C99 표준은이 경우 동작을 '구현 정의'로 지정합니다. SUS는 그 사건을 언급하지 않습니다.
의견/경험이 뭔가요? 걱정해야합니까? 그런 해결책을 피하는 것이 좋습니까?
EDIT : 사용자가 입력 파일과 출력 파일 모두에서 동일한 파일 이름을 지정하는 경우이 파일은 일부 주요 기능이 아니라 '최후의 수단'으로 사용됩니다.
EDIT : Ok, 다음 질문 하나만 더 :이 특별한 경우에는 저에게 제안 된 솔루션이 출력 파일을 쓰기 전용으로 열 때보 다 더 악할 수 있습니다 (예 : remove()
요구).
귀중한 데이터 파일에 응용 프로그램을 사용하지 말 것을 상기하여주십시오. –
README에 전용 경고가 충분합니까? 아니면 ebuild의'pkg_postinst()'에 경고를 추가해야합니까? (; –
두 파일 이름이 같으면 확실히 진행해야합니까? 사용자에게 로그 또는 콘솔에 다른 이름을 입력하라는 메시지가 표시 될 수 있습니까? – vpram86