in sample_app/onvif_camera_mock/artifacts/onvif_srvd/src/daemon.c [202:245]
int create_pid_file(const char *pid_file_name)
{
int fd;
const int BUF_SIZE = 32;
char buf[BUF_SIZE];
if( !pid_file_name )
{
errno = EINVAL;
return -1;
}
fd = open(pid_file_name, O_RDWR | O_CREAT, 0644);
if(fd == -1)
return -1; // Could not create on PID file
if( lockf(fd, F_TLOCK, 0) == -1 )
{
close(fd);
return -1; // Could not get lock on PID file
}
if( ftruncate(fd, 0) != 0 )
{
close(fd);
return -1; // Could not truncate on PID file
}
snprintf(buf, BUF_SIZE, "%ld\n", (long)getpid());
if( write(fd, buf, strlen(buf)) != (int)strlen(buf) )
{
close(fd);
return -1; // Could not write PID to PID file
}
return fd; //good job
}