流IO和文件IO的简单使用

流文件IOfopen....)是标准IO,包含在stdio.h中,可移植性强,使用的是文件指针

而文件IOopen...)可移植性低,包含在fcntl.h中,使用的是一个整形的文件描述符

 

标准IO/流IO


下面这个程序是用流来读写文件的,从终端输入,重复100遍的输入文件中,再读出来打印至屏幕上

#include<stdio.h>

int main()

{

        FILE *fp;

        char a[100];

        char b[100];

        int c=100;

        fp=fopen("ckx","w+");

        fgets(a,sizeof(a)-1,stdin);

        while(c-->0)

        {

              fwrite(a,1,strlen(a),fp);//或者fputs(a,fp);   

        }

        fseek(fp,0,SEEK_SET);

        while(fread(b,1,sizeof(b),fp)>0)

        {

                fputs(b,stdout);

        }

        fclose(fp);

        return 0;

}

 

FILE *fp为打开流返回的文件指针

 

FILE * fopen(const char * path, const char * mode);//打开流

mode字符串看下表,常用追加a+,清空并读写w+

 流IO和文件IO的简单使用

 

char *fgets(char *buf, int bufsize, FILE *stream);//行输入函数

buf为字符串,bufsize为读取数据的大小,stream为文件流,如果从终端输入则为stdin

fgets函数最后一位必须为’\0’

 

int fputs(const char *str, FILE *stream);//行输出函数

如果输出到终端,则为stdout

 

size_t fread(void *restrict ptr,size_t size,size_t nobj,FILE * restrict fp);//二进制读

ptr为数组,size为读的单位大小(如果为char,设为1),nobj为读多少个单位

 

size_t fwrite(const void *restrict ptr,size_t size,size_t nobj,FILE * restrict fp);//二进制写

fread

 

int fseek(FILE *fp,long offset,int whence);//定位流

whence参数

SEEK_SET代表从文件的起始位置开始,offset>=0

SEEK_CUR表示从当前位置开始,offset可正可负

SEEK_END表示从文件末尾开始,offset可正可负

 

 

 

文件IO 

 

#include<stdio.h>

#include<fcntl.h>

int main()

{

        int fd,c=100;

        char a[100],b[100];

        fd=open("ckx",O_CREAT|O_APPEND|O_RDWR,0666);

        scanf("%s",a);

        while(c-->0)

        {

                write(fd,a,strlen(a));

        }

        lseek(fd,0,SEEK_SET);

        while(read(fd,b,sizeof(b))>0)

        {

        //      fputs(b,stdout);

                printf("%s",b);

        }

        close(fd);

        return 0;

}

 

int open(constchar*pathname,intflags,mode_tmode);

O_RDONLY只读模式

O_WRONLY只写模式

O_RDWR读写模式

打开/创建文件时,至少得使用上述三个常量中的一个。以下常量是选用的:

O_APPEND每次写操作都写入文件的末尾

O_CREAT如果指定文件不存在,则创建这个文件

O_EXCL如果要创建的文件已存在,则返回-1,并且修改errno的值

O_TRUNC如果文件存在,并且以只写/读写方式打开,则清空文件全部内容(即将其长度截短为0)

O_NOCTTY如果路径名指向终端设备,不要把这个设备用作控制终端。

O_NONBLOCK如果路径名指向FIFO/块文件/字符文件,则把文件的打开和后继I/