#include #include #include #include #include #include // пример программы обработки текстового файла // средствами системых вызовов Linux int main(int argc, char *argv[]) { int hIn, hOut, numRead, letter, count, insert=0, total= 0; char in[80]={0}, out[80]={0}, *pos; char buf, sym; if (argc<4) { printf("Usage: ./file inputfile symbol count\n"); exit(-1); } // вставляемый символ sym=argv[2][0]; // число замен count=atoi(argv[3]); // низкоуровневое открытие файла на чтение hIn = open( argv[1], O_RDONLY); if (hIn<0) { printf("Error %d (%s) while open input file: %s!\n",errno, strerror(errno),in); exit(-2); } // формирование имени выходного файла strcpy(out,argv[1]); pos = strstr(out,"."); if (pos == NULL) strcat(out, ".out"); else { letter = pos - out; //printf("Искомая строка начинается с символа %d\n", pos - filename + 1); out[letter + 1] = 'o'; out[letter + 2] = 'u'; out[letter + 3] = 't'; out[letter + 4] = 0; //printf("output file name:%s\n", out); } // низкоуровневое открытие файла на запись hOut = open( out, O_RDWR | O_CREAT| O_TRUNC, S_IRUSR | S_IWUSR); if (hOut<0) { printf("Error %d (%s) while open output file: %s!\n",errno, strerror(errno),out); exit(-2); } // цикл до конца файла do { // посимвольное чтение из файла numRead = read( hIn, &buf, 1); if (buf == 0x20) { total++; if(total>count) write(hOut, &buf,1); else { write(hOut, &sym,1); insert++; } } else write(hOut, &buf,1); } while (numRead > 0); // Закрытие файла close( hIn); close( hOut); printf("(PID: %d), output file %s, symbol %c, inserted %d times\n", getpid(), out,sym, insert); // возвращаемое программой значение return( insert); }