PDF 뷰어에서 PDF를 열 때 Linux가 PDF를 수정하도록 허용하는 방법은 무엇입니까?

PDF 뷰어에서 PDF를 열 때 Linux가 PDF를 수정하도록 허용하는 방법은 무엇입니까?

에서 차트를 사용할 때 RPDF로 직접 출력하려고 합니다. 예를 들어 차트를 생성하는 코드는 다음과 같습니다.

library(ggplot2)
levels_fp = ggplot(data=df_forest_2,
    aes(x = levels,y=center, ymin=lower, ymax=upper))+
    geom_pointrange(aes(col=levels))+
    geom_hline(aes(fill=levels),yintercept =1, linetype=2)+
    xlab('Outcomes Evaluated')+ geom_errorbar(aes(ymin=lower, ymax=upper,col=levels),width=0.2,cex=1)+ 
    facet_wrap(~outcome,strip.position="top",nrow=1,scales = "free_x") + theme(
    axis.title = element_text(size = 18),
    axis.text = element_text(size = 14),
    legend.text = element_text(size = 16),
    legend.title = element_text(size = 16),
  
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
      
    axis.line = element_line(colour = "black"),
    legend.box.background = element_rect(),axis.text.x = element_blank(), strip.text.x = element_text(size = 14)
  ) + ylab("Odds Ratio")+labs(col="Interventions")

pdf(file="Forest_levels_2.pdf", width=12,height =12 ) 
levels_fp
dev.off()

내가 관심 있는 것은 이전 단계에서 출력한 pdf를 유지한다고 가정하는 것입니다.Forest_levels_2.pdf)가 PDF 뷰어에서 열립니다. 그런 다음 코드를 다시 실행하면 파일이 출력을 얻고 이전 PDF를 덮어쓰며 PDF 뷰어의 출력이 즉시 변경됩니다.

하지만 Windows에서 동일한 작업을 수행하려고 하면 즉, PDF 뷰어를 사용하여 PDF를 열어두고 코드를 실행하려고 하면 다음 오류가 발생합니다. -->PDF에 액세스할 수 없습니다.. Linux(저는 Ubuntu 20.04를 사용하고 있습니다)에서 동작에 차이가 있는 이유는 무엇입니까?

Windows 오류에 대한 출력이 추가되었습니다.

Error in pdf(file = "Forest_levels_2.pdf", width = 12, height = 12) : 
  cannot open file 'Forest_levels_2.pdf'

일부 변수를 제거하기 위해 Windows용 Evince PDF 뷰어(Evince 2.32)를 다운로드한 다음 Windows에서 Evince를 사용하여 PDF를 열고 동일한 실험을 다시 실행했습니다.

무슨 일이 일어났는지 맞춰보세요! ? !

Windows에서 열린 PDF를 성공적으로 수정할 수 있습니다. Evince는 Ubuntu와 Windows에서 동일하게 작동합니다. 따라서 PDF 뷰어의 속성에 더 의존할 수도 있습니다.

답변1

이것은 귀하가 사용하고 있는 PDF 뷰어의 기능입니다.

PDF 뷰어가 파일을 연 다음 내용을 읽거나 처리하는 것 같습니다. 파일을 닫을 필요는 없지만 그럴 수도 있습니다.

다음으로,inotify, 이는 누군가가 파일에 쓰면 PDF 뷰어에 알림이 전송된다는 의미입니다.

파일에 쓸 때 PDF 뷰어는 보고 있는 파일이 변경되었다는 신호를 받습니다. 이렇게 하면 PDF 뷰어가 파일을 다시 읽고 내용을 다시 처리할 수 있습니다.

Windows에서도 유사한 기능이 가능하지만 사용 중인 PDF 뷰어에서는 이 기능이 전혀 구현되지 않습니다. Windows PDF 뷰어에서 PDF를 열면 기본적으로 PDF 파일에 단독으로 액세스할 수 있으므로 다른 프로그램에서 쓰기 위해 파일을 열려고 하면 오류가 발생합니다. 뷰어는 Linux 버전과 유사한 방식으로 작동하려면 독점 액세스를 명시적으로 포기하는 시스템 호출을 수행해야 합니다.


흥미로운 것을 발견했습니다위키피디아 기사파일 잠금 관련. 그것은 말한다:

Windows는 MS-DOS 3.3에서 공유가 도입된 MS-DOS 시스템의 공유 액세스 제어 의미를 상속합니다. 따라서 애플리케이션은 파일을 열 때 명시적으로 공유를 허용해야 합니다. 그렇지 않으면 파일이 닫힐 때까지 파일에 대한 독점적인 읽기, 쓰기 및 삭제 액세스 권한을 가집니다. 파일 속성을 검색하는 액세스와 같은 다른 유형의 액세스가 허용됩니다. )

또한 다음과 같이 말합니다.

Linux 및 Apple의 macOS를 포함한 Unix 계열 운영 체제는 일반적으로 열려 있는 파일을 자동으로 잠그지 않습니다.

관련 정보