私はこれに夢中になります。ファイルを保存および抽出できるアーカイブ ライブラリを作成しようとしています。アーカイブ ファイルは次のようになります。
<0,/home/user/file.txt,154,0755>
file contents (154 byte)
各ファイルは、ヘッダー ( <...> )、4 つの「タグ」 (コンマで区切られている)、ファイルの種類 (ファイルの場合は 0、ディレクトリの場合は 1)、パス、バイト単位のサイズ、アクセス許可 (8 進数) で識別されます。stat システム コールを使用してサイズとアクセス許可を取得します (Linux を使用しています)。私の問題は、8 進数値を st_mode から文字列に変換し、それをアーカイブ ファイル (ヘッダーの 4 番目のタグ) に保存してから、抽出して chmod syscall で使用する必要があることです。
それを文字列に変換するには、次を使用します。
char mode[6];
sprintf (mode, "%o", statr.st_mode);
それを取得するには、atoiを使用しますが、機能しないようです。たとえば、4 番目のタグに格納されている値は 100644 ですが、chmod はパーミッションを間違って設定しています (ユーザーがファイルを読み取ることができません)。
よく説明したかどうかわかりませんが、必要に応じてコード全体を投稿します(ただし、実装の問題はないと思います。8進数から文字列への変換の間の問題にすぎません)
編集:解決しました!実際には strtol メソッドは機能しましたが、それをディレクトリにも適用するのを忘れていました (そのため、ファイルを含むディレクトリを抽出すると、フォルダーのパーミッション マスクが原因で Segfault が発生しました)。みんな助けてくれてありがとう!