linux 文件I/O 編程

2011-4-7

一.文件I/O編程

1.不帶緩存的文件IO操作

1.基本操作

       #include<sys/types.h>

       #include<sys/stat.h>

       #include<fcntl.h>

       Open

              Fd=open(“/tmp/hello.c”,O_WRONLY |O_CREAT,0600);

       Close

              Close(fd);

       Read

              Read(fd,buf,len)

       Write

              Write(fd,buf,len)

       Lseek

              Off_t lseek(int fd,off_t ,int whence)

       Whence      

       SEEK_SET  SEEK_CUR SEEK_END

       Lseek(fd,0,SEEK_SET)文件指針移到文件起始位置

 

2.文件鎖

Fcntl

       Fcntl(int fd, int cmd, struct flock *lock)

       Cmd   F_SETLK          F_GETLK

       Lock具體結構略,

              說明鎖的類型,有

                     F_RDLCK 讀取鎖(共享鎖,可共享)

                     F_WRLCK  寫入鎖(互斥鎖)

                     F_UNLCK   解鎖

       Fcntl(fd,F_RDLCK,&lock);

       Fcntl(fd,F_WRLCK,&lock);

       Fcntl(fd,F_UNLCK,&lock);

 

3.select

       Fcntl解決了文件共享的問題,接着就是I/O複用的問題。

       IO處理模型 包括,阻塞型IO模型,非阻塞模型,IO多路轉接模型,信號驅動IO模型,異步模型

       對於select而言,屬於IO多路轉接模型

       在這種模型下,如果請求的IO操作阻塞,且它不是真正的阻塞IO,而是讓其中的一個函數等待,在這期間,IO還能進行其他操作,select函數和poll函數就屬於此種模型。

       #include<sys/types.h>

       #include<sys/time.h>

       #include<unistd.h>

       int select(int numfds,fd_set *readfds,fd_set *writefds,fd_set *exeptfds,struct timeval *timeout)

       numfds爲需要檢測的號碼最高的文件描述符+1

       讀文件描述集 寫文件描述集 出錯文件描述集

       Timeout,如果爲0則從不等待 測試所有的描述集之後就返回

       如果爲NULL,表示永遠等待,直到捕捉到信號或者文件描述集已經準備好。

      

       對文件描述集的操作包括,

FD_ZERO(fd_set *set)

FD_SET(int fd,fd_set *set)

FD_CLR(int fd,fd_set *set)

FD_ISSET(int fd,fd_set *set) 測試該集中的一個給定位是否有變化

 

       對於selectpoll的一些東東會在udevsocket,電源管理中進一步說明

2.標準IO開發

       標準帶緩衝的IO操作包括三種緩衝存儲,全緩衝,行緩衝,不緩衝。

       1.

Fopen fclose

           FILE *stream;

           stream=fopen(“test”,”r”); “r” “w” “a”

           Fclose(stream);

    Size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream)

    Size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream)

    Size 一條記錄的大小

    Nmemb 記錄的數目

    Write返回成功寫入的記錄數目

    例子,

           #include<stdio.h>

           Int main()

{

    FILE *stream;

    Char s[3]={‘a’,’b’,’c’};

    Stream=fopen(“test”,”w”);

    i=fwrite(s,sizeof(char),sizeof(s),stream);

    fclose(stream);

}

       2.

              Fputc(fgetc(stdin),stdout);

              Char s[80];

              Fputs(fgets(s,80,stdin),stdout);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章