2012-05-12 6 views
1

지속적으로 사용 중이며 쓰여지고있는 파일을 (프로그래밍 방식으로) 이동 (또는 복사 및자를 수 있음) 할 수 있어야합니다. 이렇게하면 파일을 너무 크게 만들 수 없습니다.사용중인 파일 이동 또는 복사 및 자르기

이것이 가능합니까? Windows 또는 Linux가 좋습니다.

구체적으로 내가하려고하는 것은 FFMPEG로 비디오를 기록하고 긴 비디오를 만드는 것입니다.

답변

2

Windows와 Linux 모두 가능하지만 관련된 응용 프로그램간에 협업이 필요합니다. 파일에 새 데이터를 쓰는 응용 프로그램이 다른 응용 프로그램이 무엇을하는지 알지 못하는 경우, 아마도 작동하지 않을 것입니다. (물론 ... 잠시 후에 그 가능성이 있습니다.)

일반적으로이 기능을 사용하려면 공유 파일을 열어야합니다. 예를 들어 Windows API CreateFile을 사용하는 경우 두 응용 프로그램 모두 FILE_SHARE_READFILE_SHARE_WRITE을 지정해야 할 수 있습니다. 이렇게하면 두 (여러) 응용 프로그램이 "동시에"파일을 읽고 쓸 수 있습니다.

파일 공유 이외에도 응용 프로그램 간의 작업을 조정해야 할 수도 있습니다. 어떤 종류의 잠금 메커니즘 (파일의 일부 또는 일부 공유 뮤텍스/세마포어 잠금)을 사용해야합니다. 파일 잠금을 사용하면 파일의 알려진 오프셋을 "세마포어"로 작동하도록 잠글 수 있습니다 (파일의 물리적 끝을 넘어서는 바이트 값 일 수도 있음). 한 응용 프로그램이 다른 응용 프로그램에서 자르는 것과 동일한 시간에 파일에 추가하는 경우 예기치 않은 결과가 발생합니다.

서로 인식해야 할 두 응용 프로그램에 대한 설명으로 돌아 가기 ... 두 응용 프로그램이 모두 파일을 독점적으로 열고 성공할 때까지 작업을 계속 시도한 다음 작업을 수행하고 파일을 닫을 수 있습니다 , 본질적으로 서로의 "지식"없이 일할 수있게합니다. 그러나, 그것은 아마도 아주 잘 작동하지 않을 것이고 매우 효율적이지 않을 것입니다.

이러한 모든 것을 말하면 효율성을 위해 대안을 고려할 수 있습니다. 예를 들어 쓰기 응용 프로그램에서 새 파일에 주기적으로 쓰기를 할 수 있다면 데이터를 한 파일에서 다른 파일로 끊임없이 "이동"하는 것보다 더 효율적일 수 있습니다. 또한 파일의 일부분 (예 : 첫 번째 100MB를 다른 파일로 이동 한 다음 두 번째 100MB를 처음으로 이동)을 유지해야하는 경우 상당히 비싼 작업이 될 수도 있습니다.

0

logrotate는 Linux가 좋은 옵션이 될 것입니다. 배포판에 관한 정보가 거의 있습니다. 비슷한 Windows 서비스가 어딘가에 있다고 확신합니다.