代码展示
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#define TEST_PID_FILE "/var/run/pid_output.pid"
int lock_file(int fd){
struct flock fl;
fl.l_type = F_WRLCK;
fl.l_whence = SEEK_SET;
fl.l_len = 0;
return (fcntl(fd, F_SETLK, &fl));
}
int pid_output(char *file){
int fd = -1;
char buf[12] = {0};
if(file == NULL){
printf("pid file pointer is null\n");
return -1;
}
fd=open(file, O_RDWR | O_CREAT, 0666);
if(fd < 0){
printf("can't open %s: %s\n",file, strerror(errno));
exit(1);
}else{
if(lock_file(fd) < 0){
close(fd);
printf("can't lock %s:%s\n",TEST_PID_FILE, strerror(errno));
exit(1);
}else{
ftruncate(fd, 0);
sprintf(buf, "%ld\n", (long)getpid());
write(fd, buf, strlen(buf));
}
}
return 0;
}
void main(){
pid_output(TEST_PID_FILE);
while(1){
sleep(3);
}
}
执行结果
