Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Работа с файлами

Ответить
Настройки темы
Работа с файлами

Аватара для ramo

Новый участник


Сообщения: 39
Благодарности: 0

Профиль | Отправить PM | Цитировать


Кто-нибудь помогите разобраться с файлами. Нужно найти определенную строку и после или перед ним добавить, например "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(" ");
}

-------
____________________________________________________


Отправлено: 23:37, 09-04-2007

 

Аватара для BuGfiX

Слакофил


Сообщения: 590
Благодарности: 130

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 10:27, 10-04-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ramo

Новый участник


Сообщения: 39
Благодарности: 0

Профиль | Отправить PM | Цитировать


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);
}

-------
____________________________________________________


Отправлено: 10:57, 13-04-2007 | #3


Аватара для BuGfiX

Слакофил


Сообщения: 590
Благодарности: 130

Профиль | Сайт | Отправить PM | Цитировать


Чтож.. давайте разберемся.
Цитата:
я не очень понимаю в прогр. в *.nix
С точки зрения алгоритмов программирования, *nix ничем не отличается от win.
Цитата:
открываем файл, считываем с файла данные размером BUFSIZ в переменную buffer. потом находим указатель или место где стоит символ
'Y'. и в это место записываем inf(на место указывает t1).
Символ 'Y' Вам нужно искать в файле, со смещения размером BUFSIZ и до конца, или в содержимом переменной buffer ?
Цитата:
на место указывает t1
t1=lseek(fd,'Y',SEEK_SET);
Функция lseek не делает поиск! Она выполняет установку указателя в файле по смещению, заданому 2-м аргументом, и в Вашем случае это смещение = 'Y' = 89 байтам от начала файла.

-------
If you don`t know what to use this for, you don`t need it.

http://sergey.sereda.googlepages.com...e1_userbar.gif


Отправлено: 12:04, 13-04-2007 | #4


Аватара для ramo

Новый участник


Сообщения: 39
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

-------
____________________________________________________


Отправлено: 10:33, 23-04-2007 | #5


Аватара для BuGfiX

Слакофил


Сообщения: 590
Благодарности: 130

Профиль | Сайт | Отправить PM | Цитировать


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

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

-------
If you don`t know what to use this for, you don`t need it.

http://sergey.sereda.googlepages.com...e1_userbar.gif


Отправлено: 12:33, 23-04-2007 | #6



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » Работа с файлами

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Инфо - Работа с INF-файлами -devICE- Наборы обновлений для Windows XP/2003/Windows 7 5 13-11-2007 08:47
Delphi - Работа с файлами в Delphi Interceptor Программирование и базы данных 3 01-09-2004 15:13
Работа с файлами в  Pascal paladin Программирование и базы данных 2 26-04-2004 11:31
Работа с *reg файлами Artya Хочу все знать 4 08-09-2003 14:32
Работа с *.lng файлами Artya Хочу все знать 2 18-03-2003 14:43




 
Переход