话说今天这个事情还比较郁闷,我说怎么文件老锁不住,害得我google了一上午,结果是给文件加锁后立刻把文件关闭了,真是自作孽。 代码如下: //独占写锁,成功则返回0,失败复数,传入文件描述符 int lockfile(int fd) { struct flock fl; fl.l_type = F_WRLCK; fl.l_start = 0; fl.l_whence = SEEK_SET; fl.l_len = 0; return (fcntl(fd, F_SETLK, &fl)); } //写pid文件并加锁,成功返回0,失败则会退出或者返回-2,传参为文件名字符串 int write_pid(char *filename) { int fd; char buf[16]; fd = open(filename, O_RDWR|O_CREAT, S_IWUSR|S_IRUSR|S_IRGRP|S_IROTH); if (fd <0) { //printf exit (-1); } if (lockfile(fd) < 0 ) { close(fd); return -2; } ftruncate(fd, 0); sprintf(buf, "%d", (int)getpid()); write(fd, buf, strlen(buf)+1); //close(fd); 该死的我怎么会在这里close() return 0; }