Linux环境编程--文件基本操作
来源:互联网 发布:淘宝店铺策划方案 编辑:程序博客网 时间:2024/05/16 04:51
Linux 下目录是/这样的 而windows是\怎么记呢?\和w是不是一样的反向?所以Linux的目录就是反的反向,好记了。
一:open函数
名称:
open
目标:
打开一个文件。
头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include < fcntl.h>
函数原形:
int open(const char * pathname,int flags);
int open(const char * pathname,int flags,mode_t mode);
参数:
pathname 文件名
flags 打开模式
返回值:
-1 遇到错误
int 打开成功,返回文件描述符。
这个系统调用在进程和文件之间建立一条连接,这个连接被称为文件描述符,它就像一条由进程通向内核的管道。
要打开一个文件,必须指定文件名和打开模式,有3种打开模式:只读,只写,可读可写,分别对应于O_RDONLY,O_WRONLY,O_RDWR,这在头文件/usr/include/fcntl.h中有定义。
打开文件是内核提供的服务,如果在打开过程中内核检测到任何错误,这个系统调用就会返回-1。错误的类型是各种各样的,如:要打开的文件不存在。即使文件存在可能因为权限不够而无法打开,在open的联机帮助中列出了各种可能的错误,大家可以看看。
UNIX允许一个文件被多个进程访问,也就是说当一个文件被一个进程打开后,这个文件还可以被其它进程打开。
如果文件被顺利打开内核会返回一个正整数的值,这个数值就叫文件描述符,文件描述符是是一个简单的整数,用以标明每一个被进程所打开的文件,描述符0代表标准输出,对应的宏是 STDOUT_FILENO,描述符1代表标准输入,对应的宏为STDIN_FILENO,描述符2代表标准错误输出,对应的宏为STDERR_FILENO,系统给进程分配描述符都是从3开始的,如果同时打开好几个文件,它们所对应的的文件描述符是不同的,如果一个文件打开多次,对应的文件描述符也不相同。必须通过文件描述符对文件操作。下面的程序可以证明这一点。
二:read函数
名称:
read
目标:
把数据读到缓冲区。
头文件:
#include < unistd.h>
函数原形:
ssize_t read(int fd, void *buf, size_t count)
参数:
fd 文件描述符
buf 用来存放数据的目的缓冲区
count 要读取的字节数
返回值:
-1 遇到错误
numread 成功关闭,返回所读取的字节数目。
read这个系统调用请求内核从fd所指定的文件中读取qty字节的数据,存放到buf所指定的内存空间中,内核如果成功地读取了数据,就返回所读取的字节数目。否则返回-1。
当文件的字节数没有你想要的那么多时,read就会判断下一个数值是不是’\0’,如果是就停止读取,然后退出。numread返回的是’\0’之前的字节数,也就是是原文件的字节数而不是你想读的字节数。
三:close函数
名称:
close
目标:
关闭一个文件。
头文件:
#include < unistd.h>
函数原形:
int close(int fd)
参数:
fd 文件描述符
返回值:
-1 遇到错误
int 关闭成功,返回文件描述符。
Close这个系统调用会关闭进程和文件fd之间的连接,如果关闭过程中出现错误,close返回-1,如:fd所指的文件并不存在。关闭成功则返回文件描述符。
代码: 一个基本的打开文件,读取,并关闭的例子
#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<stdlib.h>#include<stdio.h>main(){int fd,size;char s [ ]="Linux Programmer!\n",buffer[1024];fd=open("show_read.c",O_RDONLY);size=read(fd,buffer,sizeof(buffer));close(fd);printf("%s",buffer);}
四:craet函数
名称:
creat
目标:
创建/重写一个文件
头文件:
#include <sys/types.h>
#include <stat.h>
#include < fcntl.h>
函数原形:
int creat(const char *pathname,mode_t mode)
参数:
pathname 文件名
mode 访问模式
返回值:
-1 遇到错误
\
fd 创建成功,返回文件描述符
Creat告诉内核创建一个名为filename的文件,如果这个文件不存在,就创建它,如果已经存在,就把它的内容清空,把文件的长度设为0。
如果内核成功地创建了文件,那么文件的许可位(permission bits)被设置为由第二个参数mode所指定的值.如:
fd=creat(“addressbook”,0644);
创建一个名为addressbook的文件,如果文件不存在,那么文件的许可位被设为 rw-r-r—.
如果文件已存在它的内容会被清空。任一情况下,fd都会是指向addressbook的文件描述符。
五:write函数
名称:
write
目标:
将内存中的数据写入文件。
头文件:
#include < unistd.h>
函数原形:
size_t write(int fd, const void *buf, size_t count)
参数:
fd 文件描述符
buf 内存数据
count 要写的字节数
返回值:
-1 遇到错误
Num written 成功写入,返回写入的字节数目。
在实际的写入过程中,可能会出现写入的字节数少于所要求的。这可能有两个原因,第一是有的系统对文件的最大尺寸有限制,第二是磁盘空间接近满了。在上述两种情况下内核都会尽力把数据往文件中写,并将实际写入的字节数返回,所以调用write后都必须检查返回值是否与要写入的相同,如果不同就要采取相应的措施。
学完上面几个系统调用,我们就可以自己编写的cp命令了。它的基本思路是从原文件读取数据写入缓冲,再将缓冲的数据写入目标文件。
代码:新建一个文件并写入内容
#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<stdlib.h>#include<stdio.h>main(){int fd,size;char s [ ]="Linux Programmer!\n",buffer[1024];char filename[]="newfile.txt";fd=creat(filename,0644);fd=open(filename,O_WRONLY|O_CREAT);write(fd,s,sizeof(buffer));fd=open(filename,O_RDONLY);size=read(fd,buffer,sizeof(buffer));close(fd);printf("%s",buffer);}
- Linux环境编程--文件基本操作
- Linux环境编程--编辑器基本操作
- Linux编程练习 --文件基本操作1
- C语言Linux环境下编程的基本操作
- Linux文件基本操作
- Linux文件基本操作
- Linux文件基本操作
- Linux文件基本操作
- Linux基本文件操作
- linux 基本文件操作
- Unix/Linux环境C编程入门教程(40) 初识文件操作
- 【Linux环境编程入门】四、文件操作的系统调用
- Linux 文件操作编程
- unix环境编程 文件操作
- Linux 基本命令(文件操作)
- linux 基本文件操作命令
- linux文件基本操作管理
- Linux文件基本操作管理
- ASP.NET C# 生成不失真的缩略图
- 删除U盘时提示无法停止‘通用卷’设备的解决方法!!不要每次都硬拔了,对电脑有不小的损害!!!
- 羊皮卷二我要用心中的爱来迎接今天(中英对照)
- 实验揭密大脑“千里眼”:人类预测率高达90%
- 用字符实现上下箭头
- Linux环境编程--文件基本操作
- 程序员的十层楼
- 利用Windows自带磁盘清理工具给系统“瘦身”
- android监听SD卡示例代码
- 智能电视是Android新的研发战场
- 根据数据库生成xml二法
- sql server 2005学习笔记之触发器简介
- linux下配置nginx+双tomcat负载均衡
- PhoneGap API帮助文档翻译—Geolocation(地理位置)