Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Работа с файлами (http://forum.oszone.net/showthread.php?t=82349)

ramo 09-04-2007 23:37 572170

Работа с файлами
 
Кто-нибудь помогите разобраться с файлами. Нужно найти определенную строку и после или перед ним добавить, например "090".
Что-то нашкрябал, не работает. Почему-то добавляет в конец файла. И значение t1(см. код) в другой форме выводиться.
Еще один вопрос как с помощью stat посматреть размер файла.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <math.h>

main()
{
int fd;
char inf[4]="090";
char buffer[BUFSIZ];
int t1,t2;
ssize_t rcount,wcount;

fd=open("ftr",O_RDWR);
i=0;
rcount=read(fd,buffer,BUFSIZ);
printf("rcount: ");
printf("%d",rcount);
t1=lseek(fd,'Y',SEEK_SET);
printf(" lseek: ");
printf("%d",t1);
wcount=write(fd,inf,16);
close(fd);
printf(" ");
}

BuGfiX 10-04-2007 10:27 572295

Что-то я не понимаю.. Вижу что Вы читаете из файла строку, длиной = BUFSIZ, но где вы сверяете ее с "определенной строкой, после которой надо вставить 090" - не вижу. Так же непонятно что такое i=0 (точнее зачем оно надо), ну и параметр 'Y' в функции lseek имхо никак не связан с поиском....

ramo 13-04-2007 10:57 573841

BuGfiX я не очень понимаю в прогр. в *.nix, так что извини если что -то не то.
i-она совсем не нужно(забыл убрать).
Я так пинимаю эту задачку:
открываем файл, считываем с файла данные размером BUFSIZ в переменную buffer. потом находим указатель или место где стоит символ
'Y'. и в это место записываем inf(на место указывает t1).
Подправь пожалуйста, если я что-то не так делаю.

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <math.h>

main()
{
int fd;
char inf[4]="090";
char buffer[BUFSIZ];
int t1,t2;
ssize_t rcount,wcount;

fd=open("ftr",O_RDWR);
rcount=read(fd,buffer,BUFSIZ);
printf("rcount: ");
printf("%d",rcount);
t1=lseek(fd,'Y',SEEK_SET);
printf(" lseek: ");
printf("%d",t1);
wcount=write(fd,inf,t1);
close(fd);
}

BuGfiX 13-04-2007 12:04 573882

Чтож.. давайте разберемся.
Цитата:

я не очень понимаю в прогр. в *.nix
С точки зрения алгоритмов программирования, *nix ничем не отличается от win.
Цитата:

открываем файл, считываем с файла данные размером BUFSIZ в переменную buffer. потом находим указатель или место где стоит символ
'Y'. и в это место записываем inf(на место указывает t1).
Символ 'Y' Вам нужно искать в файле, со смещения размером BUFSIZ и до конца, или в содержимом переменной buffer ?
Цитата:

на место указывает t1
t1=lseek(fd,'Y',SEEK_SET);
Функция lseek не делает поиск! Она выполняет установку указателя в файле по смещению, заданому 2-м аргументом, и в Вашем случае это смещение = 'Y' = 89 байтам от начала файла.

ramo 23-04-2007 10:33 578247

BuGfiX спасибо, твое сообщение насчет операторов помогло.
Задачку решил другим способом. Вначале я думал, сделать все это прямо в файле. Этого не удалось. Вообщем содержимое файла загоняем в переменную. Эту переменную модифицируем, а потом перезаписываем файл.
Еще вопрос: при объявлении типа <string s1> выводит ошибку, хотя указываю заговочный файл <string.h>. Может какие-то дополнения нужны. В учебнике насчет этого ниче не написано.

BuGfiX 23-04-2007 12:33 578306

В С строки объявляются как "последовательность байтов(символов), заершающихся нулем", или указатель на нее, например:

char *s1="string1";
char *s2;


Время: 01:48.

Время: 01:48.
© OSzone.net 2001-