我無法使用fcntl()和fileno。我在執行鎖機制時遇到問題。但是,當我嘗試關閉文件時,出現以下錯誤:fcntl:錯誤的文件描述符。我使用fileno來獲取文件描述,我得到-1。壞文件描述符文件無
#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 –