写一个文件并使其只读

时间:2015-07-09 15:36:45

标签: c linux file-io

我为Linux下的C学生编写了一个数据库。因此,在输入我的数据并关闭程序后,数据将自动保存在文本文件中。如何才能将此文件设为只读?我稍后会添加一个函数来读取文件中的数据,因此只有程序才能处理数据。打开文件的任何用户只能读取数据,但他无权更改文件中的数据。换句话说,如何保护我保存的数据安全? 这是一些代码:

void writeData(){
    FILE * fpw;
    fpw=fopen("database.txt","wb");
    if(fpw==NULL){
       printf("the file cannot be opened");
       exit(1);
    }
    int i;
    for(i=0;i<SIZE;i++){
        fprintf(fpw,"%s, %s, %d, %s , %s;\n",   
            (db+i)->lastname,(db+i)->firstname,(db+i)->mNr, (db+i)->subject, (db+i)->nationality);
    }
    fclose(fpw);
}

我写了一个例子。这是代码:

#include <sys/stat.h>
#include <stdio.h>
int main(int argc, char** argv){
    char mode[]="111";
    int in=strtol(mode,0,8);
    int ret_value=chmod("./file.csv",in);
    if(ret_value!=0){
        printf("failed to change mode");
       }
   }

但我希望只有该程序具有rw权限。其余的只有读取权限,包括我作为终端用户。怎么办? 我想,我会尝试阅读关于Setuid并使用它

1 个答案:

答案 0 :(得分:2)

在C中使用chmod来更改文件模式。

#include <sys/stat.h>

int chmod(const char *path, mode_t mode);

以下示例为所有者,组和其他人设置了读取权限。

#include <sys/stat.h>

const char *path;
...
chmod(path, S_IRUSR|S_IRGRP|S_IROTH);

如果您想阅读权限,请使用stat。

#include <sys/stat.h>

int stat(const char * restrict path, struct stat * restrict buf);