问题描述
我写了一段代码在c中实现文件锁定。解决错误和 ignoring all the warnings
哈哈后,我能够编译代码,但现在问题是,当我尝试向文件添加内容时,它显示分段错误。代码是:
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
char data[1000],ch;
int cont;
int main(int argc,char **argv) {
if (argc > 1) {
int fd = fopen(argv[1],"w");
if(fd == -1) {
printf("Unable to open the file\n");
exit(1);
}
static struct flock lock;
lock.l_type = F_WRLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
lock.l_pid = getpid();
int ret = fcntl(fd,F_SETLKW,&lock);
printf("Return value of fcntl:%d\n",ret);
printf("\n\n\tOperations you can perform here:\n\t\n");
printf("\n\t1.ADD TO FILE\n\t2.DELETE THE FILE\n\t3.PRINT CONTENTS OF FILE\n\t4.EXIT");
printf("\n\tEnter your choice: ");
scanf("%d",&cont);
switch(cont)
{
case 1:
printf("Enter contents to store in file : \n");
fgets(data,1000,stdin);
fputs(data,fd);
printf("Data added to the file successfully");
break;
case 2:
remove(fd);
break;
case 3:
int c = getc(fd);
while (c != EOF)
{
printf("%c",c);
c = getc(fd);
}
case 4:
exit(0);
}
}
}
我什至尝试过
fclose(fd); fd = fopen("advisory.txt","a");
这个,在 switch case 的开头添加内容到文件。但无济于事。
解决方法
您混淆了文件描述符(由 open()
返回)和指向文件的指针(由 fopen()
返回)。不要在需要定期的汽车油箱中加入柴油。
现在怎么办?
阅读这两个功能的手册页并了解差异。了解 C 中标准 I/O 库 的含义及其提供的函数(例如 fopen()、fgets()、fgetc()、fclose() 等等)。了解什么是 Unix I/O 函数(例如 open()、read()、write()、close())。然后,您将能够更正代码中导致段错误的许多问题。