- 论坛徽章:
- 2
|
网上的说法是,强制锁被建立的时候,其他进程要访问一个文件必须等待强制锁释放。于是我弄了一个实验:
我在我的rhel里面,用mount命令加上了mand选项:
- [root@localhost a]# mount -o remount, mand /
复制代码 然后我写了个一个小程序,从网上的例子改过来的:
- #include<stdlib.h>
- #include<sys/stat.h>
- #include<sys/types.h>
- #include<fcntl.h>
- #include<dirent.h>
- #include<sys/file.h>
- #include<unistd.h>
- int main()
- {
- int fd=open("mandatory.txt",O_RDWR);
- struct flock lk;
- lk.l_type=F_WRLCK;
- lk.l_start=0;
- lk.l_whence=SEEK_SET;
- lk.l_len=0;
- lk.l_pid=getpid();
- int flag=fcntl(fd,F_SETLKW,&lk);
- printf("%d\n",flag);
- getchar();//运行到这里的时候,我新开一个shell窗口
- close(fd);
- return 0;
- }
复制代码 然后测试,我建立了一个文件:
- touch mandatory.txt
- chmod g+s,g-x mandatory.txt
复制代码 运行我的程序,运行到getchar()的时候,我新开一个shell窗口(如代码注释所示),输入ls>>mandatory.txt
发现ls命令并没有等待我的getchar()输入,就能执行完毕。
问题: 这个和网上说的强制锁有点不一样啊,我期望的是另一个窗口中的ls命令能够等待我的程序运行完毕,再写入mandatory.txt,因为我已经remount了根文件系统。
我的理解错在哪里呢? 还请指教。 |
|