文件读取加锁:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/file.h>
#define LOCK_FILE "/root/priv/cjson/test.lock"
#define DATA_FILE "json.txt"
int main() {
int fd_lock, fd_data;
struct flock lock;
// 创建文件锁
fd_lock = open(LOCK_FILE, O_WRONLY | O_CREAT, 0644);
if (fd_lock == -1) {
perror("open lock file");
exit(EXIT_FAILURE);
}
// 设置独占锁
lock.l_type = F_WRLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0; // 锁定整个文件
if (fcntl(fd_lock, F_SETLKW, &lock) == -1) {
perror("fcntl lock");
close(fd_lock);
exit(EXIT_FAILURE);
}
// 写入数据文件
fd_data = open(DATA_FILE, O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (fd_data == -1) {
perror("open data file");
close(fd_lock);
exit(EXIT_FAILURE);
}
//const char *data = "hello";
const char *data = "{\"timestatmp\":123, \"msg\":\"hello\",\"result\":1}";
ssize_t bytes_written = write(fd_data, data, strlen(data));
if (bytes_written == -1) {
perror("write data file");
close(fd_data);
close(fd_lock);
exit(EXIT_FAILURE);
}
close(fd_data);
//sleep(10);
// 释放文件锁
lock.l_type = F_UNLCK;
if (fcntl(fd_lock, F_SETLK, &lock) == -1) {
perror("fcntl unlock");
close(fd_lock);
exit(EXIT_FAILURE);
}
close(fd_lock);
printf("Data written and lock released.\n");
return 0;
}
文件写入加锁:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/file.h>
#define LOCK_FILE "/root/priv/cjson/test.lock"
#define DATA_FILE "json.txt"
int main() {
int fd_lock, fd_data;
struct flock lock;
// 创建文件锁
fd_lock = open(LOCK_FILE, O_WRONLY | O_CREAT, 0644);
if (fd_lock == -1) {
perror("open lock file");
exit(EXIT_FAILURE);
}
// 设置独占锁
lock.l_type = F_WRLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0; // 锁定整个文件
if (fcntl(fd_lock, F_SETLKW, &lock) == -1) {
perror("fcntl lock");
close(fd_lock);
exit(EXIT_FAILURE);
}
// 写入数据文件
fd_data = open(DATA_FILE, O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (fd_data == -1) {
perror("open data file");
close(fd_lock);
exit(EXIT_FAILURE);
}
//const char *data = "hello";
const char *data = "{\"timestatmp\":123, \"msg\":\"hello\",\"result\":1}";
ssize_t bytes_written = write(fd_data, data, strlen(data));
if (bytes_written == -1) {
perror("write data file");
close(fd_data);
close(fd_lock);
exit(EXIT_FAILURE);
}
close(fd_data);
//sleep(10);
// 释放文件锁
lock.l_type = F_UNLCK;
if (fcntl(fd_lock, F_SETLK, &lock) == -1) {
perror("fcntl unlock");
close(fd_lock);
exit(EXIT_FAILURE);
}
close(fd_lock);
printf("Data written and lock released.\n");
return 0;
}