gpt4 book ai didi

c - 错误的文件描述符 fileno

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:50 25 4
gpt4 key购买 nike

我在使用 fcntl() 和 fileno 时遇到问题。我在实现锁定机制时遇到问题。但是,当我尝试关闭文件时,出现以下错误 fcntl: Bad file descriptor。我正在使用 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;
}

最佳答案

根据 fcntl(3) :

EBADF: fd is not an open file descriptor, or the or the command was F_SETLK or F_SETLKW and the file descriptor open mode doesn't match with the type of lock requested.

并且,您没有lockl_type 成员设置为 F_WRLCK,因为由上面的手册页强制执行。因此,只需在第一次调用 fcntl() 之前添加这一行,一切都会顺利进行。

lock.l_type = F_WRLCK;

关于c - 错误的文件描述符 fileno,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32664302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com