質問

私はLinux Cプロジェクトに取り組んでおり、ファイル記述子の作業に問題があります。

孤児のファイル記述子(ファイルはopen() 'd then link()' dがありますが、FDはまだ良いです)。元のバッキングファイルには完全な権限がありました(s_irusr | s_iwusr | s_irgrp | s_irothで作成されました)が、残念ながらファイルはo_wronlyで開かれました。ファイル記述子を複製してコピーをO_RDWRに変更することは可能ですか?

psudo-code:


//open orphan file
int fd = open(fname, O_WRONLY, ...)
unlink(fname)
//fd is still good, but I can't read from it

//...

//I want to be able to read from orphan file
int fd2 = dup(fd)
//----change fd2 to read/write???----

前もって感謝します! - アンドリュー

役に立ちましたか?

解決

いいえ、オープンモードを変更するPOSIX関数はありません。読み取り /書き込みモードで開く必要があります。ただし、一時的なファイルが作成されているため、使用することを強くお勧めします MKSTEMP. 。その機能は、読み取り/書き込みモードでファイルを適切に開きます そしてそれをリンクしません. 。最も重要なことは、ファイルの命名と作成における人種条件を回避し、それによって一時的なファイルの作成における脆弱性を回避することです。

他のヒント

int fd = open(fname, O_WRONLY, ...)
int fd_ro = open(fname, O_RDONLY, ...)
unlink(fname)
{ write to fd }
close (fd);
read or execute(!) fd_ro
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top