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 erroropen()
函数中的参数文件打开模式
访问模式 | 描述 |
---|---|
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系统编程手册》
新闻热点
疑难解答