נשלח בתאריך: 16 October 2007 בשעה 17:54 | | IP רשוּם
|
|
|
|
1)יש לי שני תהליכים שרצים במקביל ושניהם צריכים את אותו קובץ.
1א)lockf נמצא בספריה #include <unistd.h>
2)ה- fseek נועד לאתחל את הקובץ כדי שאני אחפש את המשתנה שאני צריך מההתחלה(אני כותב ini file)
3)
int WriteCfg(FILE *fp, FILE *tmp_fp, char *section, char *varname, char *var) { char line[CONFIG_LINE_LENGTH], *p; int linenum = 0; int done = 0; fseek(fp, 0, SEEK_SET); for(;;) { fgets(line, sizeof(line), fp); line[strlen(line)-1] = 0; /* remove ending \n */ linenum++; if (feof(fp)) return 1; if (!line[0]) /* empty line */ { fprintf(tmp_fp,"%s\n", line); continue; } if (line[0] == ';') /* comment line */ { fprintf(tmp_fp,"%s\n", line); continue; } if(!section) { if ((line[0] == '[') && (line[strlen(line)-1] == ']')) { fprintf(tmp_fp,"%s\n", line); line[strlen(line)-1] = 0; if (strcasecmp(&line[1], section)) continue; /* not right section */ } /* found section, now look for variable */ for (;;) { fgets(line, sizeof(line), fp); line[strlen(line)-1] = 0; /* remove ending \n */ linenum++; if (feof(fp)) { if (!done) fprintf(tmp_fp,"%s=%s\n", varname,var); return 2; } if (!line[0]) /* empty line */ { fprintf(tmp_fp,"%s\n", line); continue; } if (line[0] == ';') /* comment line */ { fprintf(tmp_fp,"%s\n", line); continue; } if (line[0] == '[') { if (!done) { fprintf(tmp_fp,"%s=%s\n", varname,var); done = 1; } fprintf(tmp_fp,"%s\n", line); continue; } p = (char *)strchr(line, '='); if (!p) return -linenum;/* bad line format */ *p = 0; /* make variable name a string */ if (strcasecmp(line, varname)) { *p = '='; fprintf(tmp_fp,"%s\n", line); continue; /* no varname match */ } p++; fprintf(tmp_fp,"%s=%s\n", varname,var); if(DEBUG) printf("cfg.c:199:varname= %s, var= %s\n", varname, var); done = 1; } } fprintf(tmp_fp,"%s\n", line); } }
|