C 将群与程序的多个实例一起使用

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

我正在用c语言编写一个计数器,它利用flocks来运行计数器程序的多个实例。程序从文件中读取和写入,增加文件中的值。当我运行多个实例时,该文件包含正确的值,但当我运行该文件一次(./count5)时,该文件中的值在3000处停止,但假定它在500处停止,因为while循环在500处结束。任何帮助都将不胜感激

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
写入文件。因此,写入的值取决于文件中已有的内容。