lseek

[機能]

  ハンドルに結合されたファイルポインタを指定された位置に移動します.成功すると先頭からのオフセットをバイト単位で返します.

[形式]
#include <sys/types.h>
#include <unistd.h>

long lseek(int handle, long offset, int origin)
	handle : ファイルハンドル
	offset : 基準点からのバイト数
	origin : 基準点.以下の定数の内どれかを選びます
		         SEEK_CUR : 現在の位置
		         SEEK_END : ファイルの終端
		         SEEK_SET : ファイルの先頭		
[使用例]

  1. lseek により,同じデータを 2 度読み込みます
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    
    int main()
    {
    	double x1 = 10.5;
    	double x2;
    	long k1 = 21;
    	long k2, k3, off;
    	int disk;
    	char *buf;
    /*
    		 ディスクへの出力
    */
    	disk = open("data", O_WRONLY|O_CREAT, S_IREAD);
    
    	buf  = (char *)(&x1);
    	write(disk, buf, 8);
    
    	buf = (char *)(&k1);
    	write(disk, buf, 4);
    
    	close(disk);
    /*
    		 ディスクからの入力
    */
    	disk = open("data", O_RDONLY);
    
    	buf  = (char *)(&x2);
    	read(disk, buf, 8);
    	buf = (char *)(&k2);
    	read(disk, buf, 4);
    
    	printf("x2 %5.1f k2 %3ld\n", x2, k2);
    
    	off = lseek(disk, 8, SEEK_SET);     /* ポインタの移動 */
    	printf("offset %ld\n", off);
    
    	buf = (char *)(&k3);
    	read(disk, buf, 4);
    
    	printf("k3 %3ld\n", k3);
    
    	close(disk);
    
    	return 0;
    }
    			
    (出力)
    x2  10.5 k2  21
    offset 8
    k3  21			
[参照]

fseek, tell, read, write

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引