您的位置:首页 > 运维架构 > Linux

linux学习之文件编程

2014-05-20 22:08 127 查看
、linux实现文件操作有两种方式

1.系统调用方法;

2.库函数实现。

下面详细介绍两种方式。

(1)系统调用

int
open(const char *pathname, int flags)

int open(const char*pathname, int flags, mode_t mode)

入参:pathname:路径

flags:打开方式(O_RDONLY,O_WRONLY,O_RDWR),另外可以附加选项(O_CREAT)

返回值:0:正确; -1:错误。

off_tlseek(int fildes, off_t offset, int whence)

入参:fildes:文件描述符;

offset:偏移量;

whence:设定从文件哪里开始偏移,通常可取如下(SEEK_END:文件尾, SEEK_SET:文件开头,SEEK_CUR:当前文件)

返回值:成功时返回目前读写文职,即距离文件开头多少字节。错误时返回-1.

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

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

入参:fd:文件描述符;

buf:存入或读取数据缓冲区;

count:大小

返回值:读取或写数据大,错误时返回-1.

举例:实现文件复制功能

<pre class="objc" name="code">int main(int argc,char **argv)
{
int from_fd,to_fd;
int ret =1;
long file_len=0;
char buffer[BUFFER_SIZE];
char *ptr;

/*判断入参*/
if(argc!=3)
{
printf("Usage:%s fromfile tofile\n",argv[0]);
exit(1);
}

/* 打开源文件 */
if((from_fd=fopen(argv[1],"rb"))==-1)
{
printf("Open %s Error\n",argv[1]);
exit(1);
}

/* 创建目的文件 */
if((to_fd=fopen(argv[2],"wb"))==-1)
{
printf("Open %s Error\n",argv[2]);
exit(1);
}

/*测得文件大小*/
file_len=lseek(from_fd,0L,SEEK_END);
fseek(from_fd,0L,SEEK_SET);
printf("from file size is=%d\n",file_len);

/*进行文件拷贝*/
while(ret)
{
ret=read(from_fd,buffer,BUFFER_SIZE);
if(ret == -1)
{
printf("read erro");
exit(1);
}
write(to_fd,buffer,ret);
file_len-=ret;
bzero(buffer,BUFFER_SIZE);
}
fclose(from_fd);
fclose(to_fd);
exit(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: