gpt4 book ai didi

c - fcntl : invalid argument in C

转载 作者:行者123 更新时间:2023-12-02 02:06:46 25 4
gpt4 key购买 nike

我正在进程间通信中使用文件锁定,下面的代码让我烦恼......当在 Macintosh 中通过终端运行时

    #include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc , char *argv[])
{
// l_type , l_whence , l_start , l_len , l_pid
struct flock f1 = {F_WRLCK , SEEK_SET , 0 , 0 , 0};
int fd;

f1.l_pid = getpid() ;

// if command line arguments , then assign a Read Lock
if (argc > 1)
{
f1.l_type = F_RDLCK ;
}

if ((fd = open("lockdemo.c", O_RDWR)) == -1)
{
perror("open");
exit(1);
}

printf("Press <RETURN> to try to get lock");
getchar() ;

printf("trying to get lock...");

if (fcntl(fd, F_SETLKW , &f1) == -1)
{
perror("fcntl");
exit(1);
}


printf("got lock !\n");
printf("Press <RETURN> to release lock:");
getchar();

f1.l_type = F_UNLCK ; //set to unlock same region

if (fcntl(fd, F_SETLK , &f1) == -1)
{
perror("fcntl");
exit(1);
}

printf("Unlocked .. \n");
close(fd);

return 0;
}

但出现以下错误:fnctl:无效参数

请帮我解决这个问题...

最佳答案

在 MacO 上,struct fancy 的成员的顺序与 Linux 中不同。

为了使代码可移植,您应该按名称分配字段,而不是假设特定的顺序。

来自 fcntl 的 MacOS 手册页:

         struct flock {
off_t l_start; /* starting offset */
off_t l_len; /* len = 0 means until end of file */
pid_t l_pid; /* lock owner */
short l_type; /* lock type: read/write, etc. */
short l_whence; /* type of l_start */
};

关于c - fcntl : invalid argument in C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14355652/

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