2017-11-13 15 views
0

pidをファイルに書き込むこのコードを実行できません。ファイルに書き込むにはXcode MacOS

NSString *text = [NSString stringWithFormat:@"%d\n", getpid()]; 
NSError *error = nil; 

if (![text writeToFile:@"/tmp/Frontend.pid" atomically:YES encoding:NSUTF8StringEncoding error:&error]) { 
    NSLog(@"Cannot write PID file %@: %@", @"/tmp/Frontend.pid", error); 
    return NO; 
} 

これは私が得るエラーです。

2017-11-13 20:19:18.742171 + 0530 TestThread [7648:273326] PIDファイル/tmp/Frontend.pidを書き込めません:エラードメイン= NSCocoaErrorDomainコード= 513 "ファイル "Frontend.pid"をフォルダ "tmp"にコピーします。 " UserInfo = {NSFilePath =を/ tmp/Frontend.pid、NSUnderlyingError = 0x6040000432a0 {エラードメイン= NSPOSIXErrorDomainコード= 1} "操作が許可されていません"}「

は私が777にディレクトリのパーミッションを変更しましたし、それはまだdoesnの十分な権限があります。助けてください。

答えて

1

さて、私は最終的にそれを修正しました。以下は、ファイル全体を破壊したxcodeの新しいプロジェクトのデフォルト設定です。私はエンタイトルメントファイルの2つのノブをオフにして、行きたいと思っていました。

${project_name}.entitlements

0

/tmpは、macOSの/ private/tmpへのシンボリックリンクです。リンクまたは宛先の権限を変更しましたか?例えば

、私のマシン上で、私は以下を参照してください。

$ ls -ld /tmp 
[email protected] 1 root wheel 11 Oct 14 14:55 /tmp -> private/tmp 
$ ls -ld /private/tmp 
drwxrwxrwt 16 root wheel 512 Nov 13 06:43 /private/tmp 

これは、rootだけがリンクを変更することができることを意味しますが、誰もがディレクトリに書き込むことができるはずです。確かに、私はそのディレクトリにファイルを書くことができます。 tスティッキービットのため、/ tmp(またはルートまたはホイール)内のファイル自体を所有するユーザーだけが、ファイルの削除や名前の変更を行うことができます。

/tmp/Frontend.pidに、上書きできないようなアクセス権が設定されていることを確認します(writeToFile:atomically:encoding:errorは既存のファイルを上書きします)。

+0

チェックしました。名前の付いたファイルはありません。コードスニペットを実行できますか? – alDiablo

+0

はい、私はあなたの例を実行しました - (あなたの例では定義されていなかった)NSLog *パスをパスに設定し、LoggerWarnをNSLogに設定しました。わたしにはできる。 – greymouser

+0

他にも何か提案がありますか?私はまだ同じ問題に直面しています。プロジェクトの設定を変更しましたか? – alDiablo

関連する問題