C 避免产生多个进程副本

博客展示了代码,并给出了代码的执行结果,聚焦于信息技术中代码相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C 避免产生多个进程副本

代码展示

#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);
   }
}

执行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值