perl-5.34.0
seek FILEHANDLE,POSITION,WHENCE

Sets FILEHANDLE's position, just like the fseek(3) call of C stdio. FILEHANDLE may be an expression whose value gives the name of the filehandle. The values for WHENCE are 0 to set the new position in bytes to POSITION; 1 to set it to the current position plus POSITION; and 2 to set it to EOF plus POSITION, typically negative. For WHENCE you may use the constants SEEK_SET, SEEK_CUR, and SEEK_END (start of the file, current position, end of the file) from the Fcntl module. Returns 1 on success, false otherwise.

C ��� stdio ��í�ゃ����í�ŝ�� fseek(3) ��∽�違�勉�������˨��FILEHANDLE �� �����<�ゃ�˨����ゃ�潟�帥��篁紙����勌��臀勉�̬┃絎������障����� FILEHANDLE ��壔��絎������勉����<�ゃ�˨����潟�����������筝�������綣���с�������障����障�������� WHENCE ��勐�ゃ�����0 ��ŝ����違����違�����篏�臀勉�� �����ゃ�����篏���� POSITION ��勌��臀勉� 荐㊤�������障��; 1 ��ŝ����違���憜��篏�臀勉����� POSITION ���������篏�臀勉� 荐㊤�������障��; 2 ��ŝ����違��EOF ������POSITION ���������������篏�臀勉�吾����違�����篏�臀勉�� 荐㊤�������障����� �����勐�ゃ�˨�壔��Fcntl ��≪�吾�ャ�若�˨�т戎��������⓾����� SEEK_SET���SEEK_CUR��� SEEK_END (�����<�ゃ�˨�勐����㏍���憜��篏�臀勉�������<�ゃ�˨�勖��緇�)���������絎���違�� 篏帥�������������с����障����� �����������˨�壔��1 ������紊掩�������˨�壔�����篁ュ�����菴������障�����

Note the emphasis on bytes: even if the filehandle has been set to operate on characters (for example using the :encoding(UTF-8) I/O layer), the seek, tell, and sysseek family of functions use byte offsets, not character offsets, because seeking to a character offset would be very slow in a UTF-8 file.

�����ゃ�����篏����絲障�����羈����: 箴����(箴������� :encoding(UTF-8) I/O 絮ゃ��篏帥����ŝ�í�����) �����<�ゃ�˨����潟����˨�����絖����篏���у�☎����������������̬┃絎���������⓾�������������⓾����� seek, tell, sysseek ��激�ŝ�若�冴�勰�∽�違� ���絖���ŝ����祉�������с�壔�ŝ�������ゃ����ŝ����祉��������篏帥����障��; ���絖���ŝ����祉�������с�激�若�壔�������勉�� UTF-8 �����<�ゃ�˨�с�壔����⓾����������������с�����

If you want to position the file for sysread or syswrite, don't use seek, because buffering makes its effect on the file's read-write position unpredictable and non-portable. Use sysseek instead.

sysread ��� syswrite ��勉�������˨����<�ゃ�˨� 篏�臀勉�����絎������������翫����壔��seek �� 篏帥����障�����; ��ŝ����ŝ�������������<�ŝ�潟�違�勉�������˨����<�ゃ�˨�勤˛��粋昭��推��臀勉� ���篏���壚��羝㋙����純�хЩ罎���с�勉�ŝ�������勉�˨�ŝ�c�⓾����障����障����� 篁c�������� sysseek ���篏帥�c�⓾��������������

Due to the rules and rigors of ANSI C, on some systems you have to do a seek whenever you switch between reading and writing. Amongst other things, this may have the effect of calling stdio's clearerr(3). A WHENCE of 1 (SEEK_CUR) is useful for not moving the file position:

ANSI C ��勤����������育�c�˨����������激�鴻�������˨����c�⓾�虁˛��粋昭��帥����吾��莨若�帥�� ��������帥�����綺⓾�˨�激�若�壔����ŝ�������違�ŝ����ŝ����翫�������������障����� �����勌����勉�������勌賢��с����������� stdio ��� clearerr(3) �����若�喝�冴����号�������������障����� WHENCE ��� 1 (SEEK_CUR) �����������<�ゃ�˩��臀勉��紊������ŝ����勉�ф�������с��:

    seek($fh, 0, 1);

This is also useful for applications emulating tail -f. Once you hit EOF on your read and then sleep for a while, you (probably) have to stick in a dummy seek to reset things. The seek doesn't change the position, but it does clear the end-of-file condition on the handle, so that the next readline FILE makes Perl try again to read something. (We hope.)

��������壔�≪����ŝ�宴�若�激�с�潟�� tail -f �����������ャ�㋘�若����������勉�˨����������с����� 筝�綺☀˛��粋昭��炊����� EOF �����育�������������������違�������鴻�ŝ�若�������� (������������) ��������若�� seek ����������������� ��ŝ�祉�����������綽�荀������������障����� seek ��夌憜����勌��臀勉��紊���眼����障����������� �����潟����˨�� EOF ��倶�������壔�ŝ�≪����障�� ��勉�с��罨<�� readline FILE ��� Perl �� �����割��������茯㏍�粋昭��������������障�����(�����勉�壔����с�����)

If that doesn't work (some I/O implementations are particularly cantankerous), you might need something like this:

�����������������ŝ����翫��(��鴻�������違�勖�ŝ�� I/O 絎�茖������������障��)��� 篁ヤ����勉�������ŝ��������������綽�荀������������障��:

    for (;;) {
        for ($curpos = tell($fh); $_ = readline($fh);
             $curpos = tell($fh)) {
            # search for some stuff and put it into files
        }
        sleep($for_a_while);
        seek($fh, $curpos, 0);
    }