C 将群与程序的多个实例一起使用
我正在用c语言编写一个计数器,它利用flocks来运行计数器程序的多个实例。程序从文件中读取和写入,增加文件中的值。当我运行多个实例时,该文件包含正确的值,但当我运行该文件一次(./count5)时,该文件中的值在3000处停止,但假定它在500处停止,因为while循环在500处结束。任何帮助都将不胜感激C 将群与程序的多个实例一起使用,c,C,我正在用c语言编写一个计数器,它利用flocks来运行计数器程序的多个实例。程序从文件中读取和写入,增加文件中的值。当我运行多个实例时,该文件包含正确的值,但当我运行该文件一次(./count5)时,该文件中的值在3000处停止,但假定它在500处停止,因为while循环在500处结束。任何帮助都将不胜感激 while(cnt < 500) { struct flock lock = {F_WRLCK, SEEK_SET, 0, 0, 0}; lock.l_pid
while(cnt < 500)
{
struct flock lock = {F_WRLCK, SEEK_SET, 0, 0, 0};
lock.l_pid = getpid();
fd = open("num3", O_RDWR | O_APPEND);
if (fcntl (fd, F_SETLKW, &lock) != -1) /* Set the lock to wait while another instance is already running */
{
fp1 = fopen("num3", "a+"); /*Read from file*/
while(fgets(buff, 255, fp1) != NULL); /*Moves to last line of file*/
i = atoi(buff); /*Convert buff to int*/
i++; /*Increment the value*/
sprintf(temp,"%d\n", i); /*Prints the incremented value to temp*/
fputs(temp, fp1);
fclose(fp1);
lock.l_type = F_UNLCK;
fcntl(fd, F_SETLK, &lock);
close(fd);
cnt++; /*Increment counter*/
}
}
while(cnt<500)
{
struct flock lock={F_WRLCK,SEEK_SET,0,0,0};
lock.l_pid=getpid();
fd=开放(“num3”,O|RDWR | O|附加);
if(fcntl(fd,F_SETLKW,&lock)!=-1)/*将锁设置为在另一个实例已在运行时等待*/
{
fp1=fopen(“num3”,“a+”);/*从文件中读取*/
while(fgets(buff,255,fp1)!=NULL);/*移动到文件的最后一行*/
i=atoi(buff);/*将buff转换为int*/
i++;/*增加值*/
sprintf(temp,“%d\n”,i);/*将递增的值打印到temp*/
FPUT(温度,fp1);
fclose(fp1);
lock.l_type=F_unck;
fcntl(fd、F_设置和锁定);
关闭(fd);
cnt++;/*增量计数器*/
}
}
您似乎正在将值i
写入文件。因此,写入的值取决于文件中已有的内容Greg Hewgill您似乎正在将值i
写入文件。因此,写入的值取决于文件中已有的内容。