首页 > 学院 > 开发设计 > 正文

linux系统编程-文件IO操作

2019-11-06 07:49:46
字体:
来源:转载
供稿:网友

四个主要的系统调用函数解释

open() 函数可以打开一个已经存在的文件,也能创建并打开一个文件 #include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flag, .../*modr_t mode*/)return file descriptor on success, or -1 on errorread() 从文件描述符fd 所指代的打开文件中读取数据#include<unistd.h>ssize_t read(int fd, void *bufer, size_t count);return number of byte, 0 or EOF, or -1 on errorwrite() 将数据写入到一个打开的文件中#include <unistd.h>ssize_t write(int fd, void *buffer, size_t count);return number of bytes written, or -1 on errorclose 关闭一个打开的文件描述符,并释放回调用进程,供该进程继续使用,当已近称终止的时候,将自动关闭其打开的所有文件描述符

显示关闭不再需要的文件描述符是良好编程习惯的体现,文件符是有限资源,文件符关闭失败可能导致一个进程讲文件描述符资源消耗殆尽,在编写长期处理大量文件的程序的时候,需要加以关注

#include <unistd.h>int close(ind fd);return -1 on error

open() 函数中的参数

文件打开模式

访问模式 描述
O_RDONLY 以只读模式打开文件
O_WRONLY 以只写模式打开文件
O_RDWR 以读写模式打开文件
O_CREAT 如文件不存在则创建之
O_DIRECTORY 如pathname不是目录,失败
O_TRUNC 截断已有文件,使其长度为0

文件新建文件时的访问权限

权限 描述
S_IRUSR 文件所有者可写
S_IWUSR 文件所有者可读
S_IRGBP 组用户可写
S_IWGBP 组用户可读
S_IROTH 其他用户可读
S_IWOTH 其他用户可写

使用系统调用实现文件的拷贝功能例子

使用了QT图形库,这里的文件拷贝实现的函数是QT应用中的一个槽函数,用于对拷贝的响应

/*拷贝到对应的路径下*/void MainWindow::copySlot(){ //打开或者创建目的文件 QString desFile = ui->copyFilePath->text(); if(desFile.isEmpty()){ QMessageBox::information(this, tr("错误提示"), tr("输入路径名为空")); return; } this->desFileName = desFile.toStdString(); int mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IWOTH | S_IROTH; int outputFd = ::open(desFileName.c_str(), O_CREAT | O_WRONLY | O_TRUNC, mode); //open desFile if(outputFd == -1) { qDebug() << tr("创建文件失败"); exit(EXIT_FAILURE); } //打开源文件 int inputFd = open(this->srcFileName.c_str(), O_RDONLY); //open SrcFile if(inputFd == -1){ qDebug() << tr("打开文件失败"); exit(EXIT_FAILURE); } //从源文件中读取数据拷贝到目的文件中 char buffer[BUF_SIZE];//设置缓冲区 size_t numRead; while((numRead = ::read(inputFd, buffer, BUF_SIZE)) > 0){ //copy ::write(outputFd, buffer, numRead); qDebug() << buffer; } ::close(inputFd); ::close(outputFd);}

本文参考: 《linux_unix系统编程手册》


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表