Вот код, который будет анализировать ваш файл, а также учитывать тот факт, что ваш файл может быть недоступен (то есть, fopen
может произойти сбой), или записывается во время чтения (то есть fscanf
)может провалиться).Обратите внимание на бесконечный цикл, который вы, возможно, не захотите использовать (это скорее псевдокод, чем реальный код, который нужно вставить в ваш проект, я не пытался его запускать).Также обратите внимание, что это может быть довольно медленно, учитывая длительность сна: вы можете использовать более продвинутый подход, это скорее своего рода взлом.
int pid;
float idle, busy, user;
FILE* fid;
fpos_t pos;
int pos_init = 0;
while (1)
{
// try to open the file
if ((fid = fopen("myfile.txt","rw+")) == NULL)
{
sleep(1); // sleep for a little while, and try again
continue;
}
// reset position in file (if initialized)
if (pos_init)
fsetpos (pFile,&pos);
// read as many line as you can
while (!feof(fid))
{
if (fscanf(fid,"PID=%d IDLE=%f BUSY=%f USER=%f",&pid, &idle, &busy, &user))
{
// found a line that does match this pattern: try again later, the file might be currently written
break;
}
// add here your code processing data
fgetpos (pFile,&pos); // remember current position
pos_init = 1; // position has been initialized
}
fclose(fid);
}