#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
int lock_reg(int fd, int cmd, int type, off_t offset, int whence, off_t len) {
struct flock lock;
lock.l_type = type;
lock.l_start = offset;
lock.l_whence = whence;
lock.l_len = len;
return (fcntl(fd, cmd, &flock));
}
pid_t lock_test(int fd, int type, off_t offset, int whence, off_t len) {
struct flock lock;
lock.l_type = type;
lock.l_start = offset;
lock.l_whence = whence;
lock.l_len = len;
if (fcntl(fd, F_GETLK, &lock) < 0) {
printf("fcntl error\n");
return -1;
}
if (lock.l_type == F_UNLCK)
return 0;
else
return lock.l_pid;
}
#define read_lock(fd, offset, whence, len) \
lock_reg((fd), F_SETLK, F_RDLCK, (offset), (whence), (len))
#define readw_lock(fd, offset, whence, len) \
lock_reg((fd), F_SETLKW, F_RDLCK, (offset), (whence), (len))
#define write_lock(fd, offset, whence, len) \
lock_reg((fd), F_SETLK, F_WRLCK, (offset), (whence), (len))
#define writew_lock(fd, offset, whence, len) \
lock_reg((fd), F_SETLKW, F_WRLCK, (offset), (whence), (len))
#define un_lock(fd, offset, whence, len) \
lock_reg((fd), F_SETLK, F_UNLCK, (offset), (whence), (len))
#define is_read_lockable(fd, offset, whence, len) \
(lock_test((fd), F_RDLCK, (offset), (whence), (len)) == 0)
#define is_write_lockable(fd, offset, whence, len) \
(lock_test((fd), F_WRLCK, (offset), (whence), (len)) == 0)
void lockabyte(const char* name, int fd, off_t offset) {
if (writew_lock(fd, offset, SEEK_SET, 1) < 0) {
printf("lock error, %s\n", strerror(errno));
return;
}
printf("%s: get lock at byte %ld\n", name, offset);
}
int main() {
int fd;
pid_t pid;
fd = creat("templock", S_IWUSR|S_IRUSR|S_IWGRP|S_IRGRP|S_IWOTH|S_IROTH);
write(fd, "ab", 2);
if ((pid=fork()) < 0) {
printf("fork error\n");
return -1;
}
else if (pid > 0) {
lockabyte("main", fd, 1);
sleep(2);
lockabyte("main", fd, 0);
}
else {
lockabyte("chld", fd, 0);
sleep(2);
lockabyte("chld", fd, 1);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
APUE.zip_apue
共150个文件
c:75个
8-13:1个
3-4:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 91 浏览量
2022-09-20
20:37:03
上传
评论
收藏 234KB ZIP 举报
温馨提示
APUE的测试代码,每一章节都有,包括所有重要的例子,学习APUE的时候编写
资源推荐
资源详情
资源评论
收起资源包目录
APUE.zip_apue (150个子文件)
0-0 8KB
0-1 8KB
0-2 9KB
0-3 8KB
1-1 8KB
1-2 8KB
1-3 9KB
1-4 8KB
1-5 9KB
1-6 8KB
1-7 8KB
1-8 9KB
10-1 8KB
10-10 9KB
10-11 9KB
10-13 8KB
10-14 9KB
10-15 9KB
10-16 9KB
10-17 9KB
10-2 8KB
10-20 9KB
10-21 9KB
10-22 8KB
10-8 9KB
11-2 8KB
11-3 9KB
12-5 9KB
12-6 9KB
12-7 9KB
12-8 11KB
13-1 9KB
14-1 9KB
14-2 9KB
14-8 8KB
15-1 9KB
15-10 9KB
15-11 9KB
15-12 13KB
15-13 9KB
15-14 9KB
15-15 9KB
15-2 13KB
15-3 9KB
15-4 8KB
15-6 8KB
15-7 9KB
15-8 9KB
15-9 13KB
2-1 8KB
3-1 8KB
3-2 9KB
3-4 8KB
3-5 9KB
4-1 8KB
4-10 9KB
4-2 8KB
4-3 8KB
4-4 8KB
4-5 8KB
4-6 9KB
4-8 8KB
5-3 9KB
5-4 9KB
6-1 9KB
7-10 8KB
7-2 8KB
7-5 9KB
8-1 9KB
8-13 8KB
8-18 9KB
8-2 9KB
8-3 9KB
8-5 9KB
8-8 9KB
14-2.c 2KB
15-13.c 2KB
15-12.c 2KB
15-9.c 2KB
8-18.c 2KB
10-14.c 1KB
10-20.c 1KB
10-15.c 1KB
15-11.c 1KB
8-3.c 1KB
12-8.c 1KB
12-7.c 1KB
6-1.c 1KB
15-2.c 1KB
10-17.c 977B
11-3.c 972B
10-16.c 969B
13-1.c 957B
10-11.c 927B
8-2.c 913B
15-3.c 904B
5-3.c 900B
10-13.c 896B
8-13.c 882B
7-5.c 846B
共 150 条
- 1
- 2
资源评论
小贝德罗
- 粉丝: 68
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功