Linux基本文件操作

来源:互联网 发布:php简历模板免费下载 编辑:程序博客网 时间:2024/06/05 02:37

打开文件函数

open函数用于在linux中打开一个文件,若文件不存在,先创建再打开,若成功返回文件操作符,不然返回-1.

#include<sys/stat.h>

#include<sys/types.h>

#include<fcntl.h>

int open(const char *pathname,int flag);

int open(const char *pathname,int flag, mode_t mode);

以上为open函数的标准调用格式。open函数的各个参数实例说明如下。

1.pathname

pathname 是一个指针变量,用于传递包含了路径的完整文件名称,其典型应用实例如"/dev/log"。

2.flags参数

0:只读  1:只写   2:读写

以上关键字是唯一的,不能用or来链接。此外可选参数有:

O_CREAT 当文件不存在时将创建此文件。

O_EXCL 用于测试一个文件是否存在,存在则报错,不存在则创建。

O_NOCTTY 当pathname指向一个终端设备时,它将不再是进程控制的终端。

O_TRUNC 存在即截断。

O_APPEND 追加方式打开,每次进行写操作时,文件指针都会被放置到文件末尾。

O_NONBLOCK/O_NDELAY 以无阻方式打开,仅对进程间通信的操作很有用。

O_SYNC 文件以I/O方式打开。任何写操作都会使进程被阻塞。

这些可以用"|"符号连接。

3.mode参数

考虑到要打开的文件可能不存在,可以使用open第三个参数。


支持或运算。

4.Open函数应用实例。

#include<unistd.h>

#include<stdlib.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<stdio.h>

int main(void)

{

    int temp;

    temp=open("./examtext",ORDWR|O_CREAT,S_IRWXU);

    printf("%d\n",temp);

    temp=close(temp);

    printf("%d\n",temp);

    exit(0);

}

结果为

3

0


关闭文件函数 

close函数用于关闭一个已经打开的文件。如果关闭成功则返回0,否则返回-1.

标准调用格式如下:

#include<unistd.h>

int close(int fd);


创建文件函数

create函数用于在Linux中创建一个文件,如果文件创建成功返回该文件对应的文件描述符,反之返回-1.create函数的标准调用格式如下:

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<const char *pathname,mode_t mode);

1.pathname(同open)

2.mode(同open)

3create的应用实例

#inlcude<fcntl.h>

#include<stdio.h>

#include<sys/types.h>

#include<sys/stat.h>

int main(int argc,char *argv[ ]}

{

    int temp;

    if(argc!=2)

    {

       printf("run error\n");

       return 1;

    }

temp = creat (*(argv+1),S_IRWXU);

    printf("%d\n",temp;

    return 0;

}


写文件函数

标准调用格式如下:

#include<unistd.h>

ssize_t write(int fd,void *buf, size_t count);

1.fd参数说明

fd参数是待写入文件的文件描述符。

2.buf参数说明

buf是一个指向缓冲区的指针待写入数据必须存放在该缓冲区内

3.count参数说明

count表示本次操作将要写入文件的数据的字节数。

4.write的应用示例

#include<fcnt1.h>

#include<unistd.h>

#include<stdio.h>

int main(int argc,char *argv[ ])

{

    int fileID,temp;

    char wbuf[15]="this is a test!";

    fileID =open(*(argv+1),O_RDWR|O_CREAT,S_IRWU);

    printf("%d\n",fileID);

    temp=write(fileID,wbuf,15);

    printf("%d\n",temp);

    close(fileID);

    return 0;

}


文件偏移定位函数

每个打开的文件都有一个与其相关的当前文件偏移量(也叫文件指针),通常是一个非负整数,读写操作都是从个当前文件的 文件偏移处开始,并使偏移量增加所读写的字节数。

lseek函数的标准调用格式说明如下:

#include<sys/types.h>

#include<unistd.h>

off_t leek(int fds, off_t offset,int whence);

1.fds参数说明

fds参数是待写入文件的文件描述符。

2.off_set

off_set是文件偏移量,指的是每一次对文件读写操作所需移动的距离,单位为字节。

3.Whence参数说明

SEEK_SEK:将偏移量设置为文件开始的为之后的offset个字节。

SEEK_CUR:将偏移量设置为当前偏移量之后的offset个字节。

SEEK_END:将偏移量设置为当前文件长度加上off_set个字节。

4.lseek的应用实例

#include<fcntl.h>

#include<stdio.h>

int main(int argc,argv[ ])

{

    int temp,seektemp,i,j;

    int fileID;

    char wbuf[ 17]=this is a test!\r\n";

    if(argc!=2)

     {

        printf("run error!\n);

       return 1;

      }

fileID = open (*(argv+1),O_RDWR|O_CREAT,S_IRWXU);

temp =write (fileID,wbuf,sizeof(wbuf));

seektemp=lseek(fileID,0,SEEK_CUR);

for(i =0;i<10;i++)

{

    j=sizeof(wbuf)*(i+1);

    seektemp = lseek(fileID,j ,SEEK_SET);

    temp = write(fileID,wbuf,sizeof(wbuf));

}

close(fileID);

return 0;

}


读文件函数

read函数从一个已经打开的linux文件中读取指定长度的数据,如果操作成功则返回读到的字节,如果已达到文件的末端则返回0;如果出错返回-1.

read函数的标准调用格式说明如下:

#include<unistd.h>

ssize_t read(int fd,void *buf,size_t count);

1.fd参数说明

fd参数是待读的文件描述符

2.buf参数说明

存放读出数据的缓冲区指针。

3.count参数说明

count是待读取数据长度,如果count为0,则read函数返回0并且没有七他结果,若count大于32767,则结果不能确定。

read的应用实例:

#include<fcnl.h>

#include<unistd.h>

#include<stdio.h>

#define PERMS 0666

#define DUMMY 0

#define MAXSIZE 1024

int main(int argc,char *argv[ ])

{

    int  sourcefile ID,targetfileID;

    int readNO=0;

    char WRBuf=0;

    if(argc!=3)

{

     printf("run error\n");

     return 1;

}

if((sourcefileID=open(*(argv+1),O_RDONLY,DUMMY)==-1)

{

     printf("Source file open error!\n");

     return 2;

}

if((targetfileID=open(*(argv+2),O_WRONLY|O_CREAT,PERMS))==-1)

{

     printf("Target file open error!\n");

     return 3;

}

while((readNO=read(sourcefileID,WRBuf,MAXSIZE))>0)

if(write(targetfileID,WRBuf,readNO)!=readNO)

{

    printf("Target file write error!\n);

    return 4;

}

    close(sourcefileID);

    close(targetfileID);

    return 0;

}

0 0
原创粉丝点击