[PERL] каким символом обозначается конец файла?

krasikovroman

Подскажите, кто знает, каким символом обозначается конец файла в Перле?
В С это по-моему что-то вроде \х0.
Спасибо!

Ivan8209

Никак.
Конец файла ОС-зависим.
В широкораспространённых ОС он не обозначается никак.
---
...Я работаю антинаучным аферистом...

krasikovroman

Не поняла. Все равно должено быть по-моему какой-то символ, кот можно записать в любое место файла так, что потом это уже будет считаться конец файла. Если этот символ ОС-зависим, то какой он в Unixe? Если и тут я не права, то как мне просто укоротить файл? Как-то должно быть можно!

evgen5555

Конец файла в Un*x-системах обычно обозначается через Ctrl-D.

krasikovroman

А как этот CTRL-D в прогу вписать? Прям так и писать?

rosali

должен быть по-моему какой-то символ, кот можно записать в любое место файла так, что потом это уже будет считаться конец файла

Конечно не должно быть такого символа , иначе как бинарные данные в файл записывать? , придется защищаться от присутствия в них этого символа, фигня какая-то вобщем. Просто ОС хранит длину файла где-то в другом месте, вот и все...
А '\x0' == 0, обозначает в С конец строки.

evgen5555

Йо, это ж не круто!
http://iis1.cps.unizar.es/Oreilly/perl/prog/ch03_031.htm

evgen5555

>кначе как бинарные данные в файл записывать?
Для этого есть спец. тип файлов.
По умолчанию там текстовая обработка

Ivan8209

В униксах такого нет.
См., например, read(3).
Файл лучше открыть сразу с усечением: O_TRUNC.
---
...Я работаю антинаучным аферистом...

Ivan8209

Это не к тому.
^D = EM (End of Medium).
---
...Я работаю антинаучным аферистом...

Ivan8209

Если всё-таки тебе надо именно усекать,
то попробуй найти функцию truncate(2).
---
...Я работаю антинаучным аферистом...

yalf

Наверное, я жуткий тормоз. Но я все равно не понимаю.
Вот есть например файл text.txt - "hello, world!". Как его открыть в Перле, сделать "hello," и закрыть?

krasikovroman

СПАСИБО!
Кажется, пашет!

Ivan8209

Прочитать с помощью read(2) ровно столько, сколько тебе надо, и закрыть.
Всё.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek

deestr

если не ошибаюсь ест такая ф. feof;
а в Unix конец файла как и конец строки \0

korol41

> Никак.
а в Си есть.... ЕОF называется.

Ivan8209

Загляни в описание (G)libc и узнай, откуда он появляется.


bash-2.05b# grep EOF /usr/include/stdio.h
#define __SEOF 0x0020 /* found EOF */
#define EOF (-1)
#define SEEK_END 2 /* set file offset to EOF plus offset */
#define __sfeof(p) p)->_flags & __SEOF) != 0)
#define __sclearerr(p) voidp)->_flags &= ~(__SERR|__SEOF




SCANF(3) FreeBSD Library Functions Manual SCANF(3)
NAME
scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf -- input format conver-
sion
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <stdio.h>
int
scanf(const char * restrict format, ...);




RETURN VALUES
These functions return the number of input items assigned, which can be
fewer than provided for, or even zero, in the event of a matching fail-
ure. Zero indicates that, while there was input available, no conver-
sions were assigned; typically this is due to an invalid input character,
such as an alphabetic character for a `%d' conversion. The value EOF is
returned if an input failure occurs before any conversion such as an end-
of-file occurs. If an error or end-of-file occurs after conversion has
begun, the number of conversions which were successfully completed is
returned.


Da capo.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Karel Capek.
Оставить комментарий
Имя или ник:
Комментарий: