附加到linux系统调用的文件

时间:2014-03-27 19:32:02

标签: linux system-calls

我想使用linux系统调用将我的记录追加到二进制文件中。 我是linux中的初学者,甚至是C语言。

到目前为止我得到了:

int file;

struct rec new_record=addNewEntry(); 

file=open("mydatabase.db",O_APPEND  | O_CREAT);  

if (file<0)
{
    printf("Error at opening the file\n");
    return 1;
}

if (write(file, &new_record, sizeof(new_record)) < 0){
    printf("Writing error\n");
    return 1;
}

close(file);

我的记录struct和addNewEntry函数:

struct rec addNewEntry(){

//init
char name[32];
char team[32];
char city[32];
char date[32];
int max;
int cost;

//input
printf("Type name: \n");
scanf("%s" , name);

printf("Type team: \n");
scanf("%s" , team);

printf("Type city: \n");
scanf("%s" , city) ;

printf("Type date: \n");
scanf("%s" , date);

printf("Type guests limit: \n");
scanf("%d", &max);

printf("Type price: \n");
scanf("%d", &cost);

//create record
struct rec record;

strncpy(record.name, name, 32);
strncpy(record.team, team, 32);
strncpy(record.date, date, 32);
strncpy(record.city, city, 32);

record.max = max;
record.cost = cost;

return record;
}

struct rec
{     

    int max,cost; 
    char name[32];
    char team[32];
    char city[32];
    char date[32];
}; 

程序以&#34;写入错误&#34;退出。 有什么建议?我怎么能在这个问题上深入挖掘?

2 个答案:

答案 0 :(得分:2)

引用open()的手册页:

  

参数标志必须包含以下访问模式之一:O_RDONLY,O_WRONLY或O_RDWR。这些请求分别以只读,只写或读/写方式打开文件。

你的公开电话显然没有跟随。因此,将O_WRONLY或O_RDWR添加到您的选项中。

答案 1 :(得分:0)

int t = open(“ test1.txt”,O_WRONLY | O_APPEND);

使用此模式,它将附加到文件末尾;

示例代码: //确保已创建文件。

int main()
{
    int t = open("test1.txt", O_WRONLY | O_APPEND);
    char avd[100];
    printf("ENTER THE DATA - ");
    scanf("%s",avd);
    write(t,avd,12);
    close(t);
}