Из языков программирования имел дело только с Бейсиком и Паскалем. На последнем и писал большинство программок по учёбе. Тут возникла необходимость освоить C и написать программку. Стал пытаться освоить язык по книге Кернигана и Ритчи, но никак не могу понять принципы работы с файлами.
Во-первых, смущает отсутствие строковых переменных. Если их нет, то как определяется название файла? Это касается не только функции fopen, но и других функций, использующих, то, что в Паскале называлось "string". Например, printf.
Объясните, кто-нибудь, человеку доступно: как осуществляется открытие файла для записи -- не пойму, какую роль в этом деле играют указатели; и перебитие отдельных, необходимых мне, символов в файле. Больше мне, собственно, ничего в этом деле не нужно. Не могу мозг перестроить...
Работа с файлами в C (Туплю...)
Модератор: Модераторы разделов
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Работа с файлами в C
_Gleb_ писал(а): ↑28.07.2007 18:30Из языков программирования имел дело только с Бейсиком и Паскалем. На последнем и писал большинство программок по учёбе. Тут возникла необходимость освоить C и написать программку. Стал пытаться освоить язык по книге Кернигана и Ритчи, но никак не могу понять принципы работы с файлами.
Во-первых, смущает отсутствие строковых переменных. Если их нет, то как определяется название файла?
Почему нет? Очень даже есть. В Сях строка -- это массив символов. fopen требует ссылку на константный массив символов в качестве имени файла. То есть, можно прямо имя файла и указать.
Это касается не только функции fopen, но и других функций, использующих, то, что в Паскале называлось "string". Например, printf.
Объясните, кто-нибудь, человеку доступно: как осуществляется открытие файла для записи -- не пойму, какую роль в этом деле играют указатели; и перебитие отдельных, необходимых мне, символов в файле. Больше мне, собственно, ничего в этом деле не нужно. Не могу мозг перестроить...
Так, вроде, в man fopen все написано.
fopen возвращает указатель на переменную типа FILE.
FILE *fptr;
fprt = fopen("myfile", "r");
Я, кстати, предпочитаю пользовать open(), а не fopen()...
PS Вот примерчик с fopen'ом
http://luv.asn.au/overheads/prog/gdb_example.html
-
_Gleb_
- Сообщения: 467
- ОС: Kubuntu 12.04 LTS
Re: Работа с файлами в C
А если мне нужно переписать N-ый байт в файле на символ "A", то это будет что-то вроде:
и короче никак? Без считывания предидущих байтов не обойтись? А как потом подвинуть указатель байта назад?
Код: Выделить всё
for (i = 1; i < N-1; i++)
с=getc(myfile);
putc ("A",myfile);и короче никак? Без считывания предидущих байтов не обойтись? А как потом подвинуть указатель байта назад?
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Работа с файлами в C
_Gleb_ писал(а): ↑18.08.2007 23:30А если мне нужно переписать N-ый байт в файле на символ "A", то это будет что-то вроде:
Код: Выделить всё
for (i = 1; i < N-1; i++) с=getc(myfile); putc ("A",myfile);
и короче никак? Без считывания предидущих байтов не обойтись? А как потом подвинуть указатель байта назад?
man lseek
?
-
_Gleb_
- Сообщения: 467
- ОС: Kubuntu 12.04 LTS
Re: Работа с файлами в C
Спасибо! Только не понял: а откуда она знает, о каком файле идёт речь?
-
slasher
- Сообщения: 92
- ОС: Arch
Re: Работа с файлами в C
repositions the offset of the open file associated with the file descriptor fildes
то есть первый аргумент -- это идентификатор открытого файла
то есть первый аргумент -- это идентификатор открытого файла
Today would be a good day to DIE.
-
_Gleb_
- Сообщения: 467
- ОС: Kubuntu 12.04 LTS
Re: Работа с файлами в C
А что за идентификатор? Откуда его брать? Почему он имеет тип int?
-
slasher
- Сообщения: 92
- ОС: Arch
Re: Работа с файлами в C
Идентификатор (дескриптор) возвращается функцией (системным вызовом) open(). Если Вы пользуетесь fopen(), то Вам нужен соответственно fseek(), которому передается указатель на
FILE
FILE
Today would be a good day to DIE.
-
_Gleb_
- Сообщения: 467
- ОС: Kubuntu 12.04 LTS
Re: Работа с файлами в C
Да, спасибо, это будет лучше: дополнительной библиотеки, подключать не надо...
