mmap,flock,fsync等函数的用法。
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/file.h>
#include <unistd.h>
#include <string.h>
int main()
{
int fd;
void *start;
struct stat sb;
//fd = open("/mnt/ceph-kernel/1.txt", O_RDONLY); /*打开/etc/passwd */
fd = open("/mnt/ceph-kernel/1.txt",O_RDWR); /*打开/etc/passwd */
if(fd < 0)
printf("open file failed\n");
fsync(fd);
if(flock(fd, LOCK_EX) == 0)
{
printf("file is locked\n");
// sleep(10);
}
fstat(fd, &sb); /* 取得文件大小 */
//start = mmap(NULL, sb.st_size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
start = mmap(NULL, sb.st_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if(start == MAP_FAILED) /* 判断是否映射成功 */
return;
memcpy((char*)start,"a", 1);
write(5, start, sb.st_size);
fsync(fd);
printf("%s", start); munmap(start, sb.st_size); /* 解除映射 */
close(fd);
return 0;
}
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/file.h>
#include <unistd.h>
#include <string.h>
int main()
{
int fd;
void *start;
struct stat sb;
//fd = open("/mnt/ceph-kernel/1.txt", O_RDONLY); /*打开/etc/passwd */
fd = open("/mnt/ceph-kernel/1.txt",O_RDWR); /*打开/etc/passwd */
if(fd < 0)
printf("open file failed\n");
fsync(fd);
if(flock(fd, LOCK_EX) == 0)
{
printf("file is locked\n");
// sleep(10);
}
fstat(fd, &sb); /* 取得文件大小 */
//start = mmap(NULL, sb.st_size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
start = mmap(NULL, sb.st_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if(start == MAP_FAILED) /* 判断是否映射成功 */
return;
memcpy((char*)start,"a", 1);
write(5, start, sb.st_size);
fsync(fd);
printf("%s", start); munmap(start, sb.st_size); /* 解除映射 */
close(fd);
return 0;
}
1917

被折叠的 条评论
为什么被折叠?



