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 ViewerでPDFを開くと、デフォルトでPDFファイルに単独でアクセスできるため、別のプログラムで書き込み用にファイルを開こうとするとエラーが発生します。ビューアは、Linuxバージョンと同様の方法で機能するには、排他アクセスを明示的に放棄するシステムコールを実行する必要があります。


興味深いものを見つけましたウィキペディア記事ファイルロック関連。それは言う:

Windowsは、MS-DOS 3.3で共有が導入されたMS-DOSシステムの共有アクセス制御の意味を継承します。したがって、アプリケーションはファイルを開くときに明示的に共有を許可する必要があります。それ以外の場合は、ファイルが閉じられるまで、ファイルへの排他的な読み取り、書き込み、および削除アクセス権があります。ファイル属性を検索するアクセスなど、他の種類のアクセスが許可されます。 )

また、次のように言います。

LinuxやAppleのmacOSを含むUnix系オペレーティングシステムは、通常開いているファイルを自動的にロックしません。

おすすめ記事