0

1 つまたは複数のディレクトリの内容を 1 つの出力ディレクトリにマージする必要がある uni のプロジェクトに取り組んでいます。出力ディレクトリに出力されたファイルには読み取りまたは書き込みアクセス権がないことを除いて、私のプロジェクトは一見完全に機能します。変更できます。手動ですが、これは望ましい解決策ではないと想定しています。私はcとOSXにかなり慣れていないので、非常に簡単に修正できる可能性があります。

現在、mkdir 関数の mode_t パラメータに 0777 を使用しており、O_RDWR ですべてのファイルを開いています。

4

1 に答える 1

1

int dest= open(file_name, O_CREAT|O_RDRW)が間違っています。O_CREATをフラグとして指定する場合、open()は、3番目の引数である許可ビットを提供することを期待します。

これはあなたが例えばする必要があることを意味しますint dest= open(file_name, O_CREAT|O_RDRW, 0755);ファイルをコピーしているので、 stat ()を使用してそのファイルの既存のアクセス許可を読み取り、宛先ファイルを開いて作成するときに同じアクセス許可を提供できます。

新しいファイルを作成するときのファイルパーミッションビットはumaskの影響を受けることにも注意してください。既存のパーミッションビットをコピーする場合は、ファイルをコピーする前に呼び出すことをお勧めしumask(0);ます。これにより、常に元のファイルと同じパーミッションを取得できます。

于 2012-10-29T07:52:30.587 に答える