1

作成したファイルに PERMS として入れたものはすべて同じ権限を持っているようです-rwx rx rx

755 と 777 を試しましたが、アクセス許可は同じままです。

#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/stat.h>
#define PERMS 0777

int main(int argc, char *argv[])
{
    int createDescriptor;
    char fileName[15]="Filename.txt";

    if ((createDescriptor = creat(fileName, PERMS )) == -1)
    {
        printf("Error creating %s", fileName);
        exit(EXIT_FAILURE);
    }

    if((close(createDescriptor))==-1)
    {
        write(2, "Error closing file.\n", 19);
    }

    return 0;
}
4

2 に答える 2

5

呼び出す前に umask を変更する必要があるかもしれないと思いますcreat:

umask(0000);

を参照してくださいman 2 umask。デフォルトの umask は多くの場合 0022 であり、0777 と 0755 の違いがまったくなくなります。

于 2013-01-01T17:56:24.387 に答える
0

関数をお試しくださいchmod。詳細については、右クリックしてIDEと入力してchmodください。

名前:

chmod- ファイルのモード変更

あらすじ:

 #include <sys/stat.h>
 int chmod(const char *path, mode_t mode);

説明:

chmod()関数は変更S_ISUID, S_ISGID, [XSI] S_ISVTX, され、path 引数が指すパス名で指定されたファイルのファイル許可ビットが、mode 引数の対応するビットに変更されます。アプリケーションは、プロセスの実効ユーザー ID がファイルの所有者と一致すること、またはプロセスがこれを行うための適切な特権を持っていることを確認する必要があります。

S_ISUID, S_ISGID, [XSI] S_ISVTX, ファイル許可ビットについては、<sys/stat.h>.

呼び出しプロセスに適切な特権がなく、ファイルのグループ ID が実効グループ ID または補助グループ ID の 1 つと一致せず、ファイルが通常のファイルである場合、ビットS_ISGID(実行時に set-group-ID ) は、chmod() から正常に戻るとクリアされます。

追加の実装定義の制限により、S_ISUID and S_ISGIDモードのビットが無視される場合があります。

chmod() の呼び出し時に開いているファイルのファイル記述子への影響は、実装定義です。

正常に完了すると、chmod() はファイルの st_ctime フィールドを更新するようにマークします。

戻り値:

正常に完了0すると、返却されます。それ以外の場合は、-1が返され、エラーを示すために errno が設定されます。が返された場合-1、ファイル モードは変更されません。詳細については、このリンクを参照してください。

于 2013-01-01T18:01:06.203 に答える