flock() is to apply or remove an advisory lock on an open file. It is available on most of OS, and I have tried it and it can work on Linux and Android OS. It can resolve the problem which muti-processes access the same file.
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <sys/file.h> #include <iostream> void lockUnLock() { int fd, i; char path[] = "test.txt"; fd = open(path, O_WRONLY | O_CREAT); if (fd != -1) { std::cout << "open file " << path << std::endl; std::cout << "Please input a number to lock the file" << path << std::endl; scanf("%d", &i); if (flock(fd, 2) == 0) { std::cout << "The file was locked " << std::endl; } else { std::cout << "The file was not locked " << std::endl; } std::cout << "please input a number to unlock the file " << std::endl; scanf("%d", &i); if (flock(fd, 8) == 0) { std::cout << "The file was unlocked. " << std::endl; } else { std::cout << "The file was no unlocked. " << std::endl; } close(fd); } else { std::cout << "Cannot open file " << path << std::endl; } } int main() { lockUnLock(); return 0; }
Src code: : https://gist.github.com/tzutalin/ad4277e8ee24392b9ea23765452d6528
Note: You can also use semget/semop to do that, but Android Bionic does not support that..
Note: You can also use semget/semop to do that, but Android Bionic does not support that..
c编程代码示例
ReplyDelete使用terminfo数据库