У меня возникли проблемы с использованием fcntl() и fileno. У меня возникла проблема с внедрением механизма блокировки. Однако, когда я пытаюсь закрыть файл, я получаю следующую ошибку: fcntl: Плохой дескриптор файла. Я использую fileno, чтобы получить описание файла, и я получаю -1.bad file descriptor fileno
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
//args ==path to the file
int main(int argc, char *argv[])
{
struct flock lock = {F_WRLCK, SEEK_SET, 0, 0, 0 };
int fd;
FILE* fp;
lock.l_pid = getpid();
if (argc > 1)
lock.l_type = F_RDLCK;
printf("%s\n", argv[1]);
fp = fopen(argv[1], "w");
if(fp==NULL)
{
perror("fopen");
exit(1);
}
fd=fileno(fp);
getchar();
if (fcntl(fd, F_SETLKW, &lock) == -1) {
perror("fcntl");
exit(1);
}
lock.l_type = F_UNLCK;
if (fcntl(fd, F_SETLK, &lock) == -1) {
perror("fcntl");
exit(1);
}
close(fd);
return 0;
}
вы должны обращаться ARGC <= 1 –