c-切换情况下的分段错误



我写了一个代码来实现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 filen");
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:%dn",ret);
printf("nntOperations you can perform here:ntn");
printf("nt1.ADD TO FILEnt2.DELETE THE FILEnt3.PRINT CONTENTS OF FILEnt4.EXIT");
printf("ntEnter 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"(;

这个,在切换案例的开头,将内容添加到文件中。但无济于事。

您混淆了文件描述符(由open()返回(和指向file的指针(由fopen()返回(。不要在需要定期保养的汽车油箱里放柴油。

现在怎么办?

阅读这两种功能的手册页面,并了解其区别。理解C中标准I/O库的含义及其提供的函数(例如fopen((、fgets((、fg((、fclose((等(。了解Unix I/O函数是什么(例如open((、read((、write((和close(((。然后,您将能够纠正代码中导致segfault的许多问题。

相关内容

  • 没有找到相关文章

最新更新