Visual Studio Cross-Platform Buildを使用してアプリケーション(.out)ファイルをビルドするRaspberry Pi 3があります。 (.out) ファイルには全員の権限があります。これを実行すると、Piにいくつかの出力データを含むいくつかのテキストファイルを保持するフォルダが作成されます。ただし、データにアクセスするためにフォルダを開こうとすると、「開くエラー...権限が拒否されました」というエラーが発生します。何らかの理由で出力フォルダの権限は「所有者のみ」です。権限を変更するたびに「chmod」を使用する必要があります。これは非常に不便です。奇妙なことに、同じ「.out」を持つ他のPiデバイスがありますが、ファイルにアクセスでき、権限の問題はありません。この特定のデバイスに新しいOSイメージをインストールしようとしましたが、同じ問題が発生しました。どんなアイデアがありますか?
編集:これは出力フォルダを作成するために使用するコードです。
if (mkdir(outputdir_time_tagged, 0700) == 0)
printf("[INFO_] Output directory created successfully\n");
答え1
プログラムが特権を設定しない限り、UMASKが使用されます。
でグローバルにUMASKを設定できます/etc/pam.d/common-session
。現在のセッションにUMASKを設定できます
umask 007
特定のコマンドの場合でも:
(umask 002 && a.out)
答え2
コマンドで権限を変更すると、問題が解決することがわかりました。私が使用する0700権限は「所有者」にのみ適用されます。私が開発しているRaspberry Piでは、「root」は私のユーザーアカウントではなく所有者です。権限を777に変更すると、「誰でも」権限が設定されます。 Ljm Dullaartが答えで述べたように、「mkdir」は「umask」の影響を受けるため、「umask」の値に関係なく、必要な777権限が適用されるように「chmod」を追加しました。
if (mkdir(outputdir_time_tagged, 0777) == 0)
chmod(outputdir_time_tagged, 0777);
printf("[INFO_] Output directory created successfully\n");