Linux文件操作

open()

函数作用:打开文件path,进行oflags操作。返回文件path的文件描述符。如果两个程序同时打开一个文件,将得到两个不同的文件描述符。

头文件:	#include "fcntl.h"
函数原型:int open(const char* path,int oflags);或int open(const char* path,int oflags, mode_t mode); 	  	
函数返回值:返回-1时代表函数出错,错误代码保存在全局变量errno中。

oflags参数是通过必需文件访问模式与其他可选模式相结合的方式来指定的。open调用必须使用文件访问模式之一。

文件访问模式:

	模式			说明
	O_RDONLY		以只读方式打开
	O_WRONLY		以只写方式打开
	O_RDWR			以读写方式打开

可选模式:

			模式		说明
			O_APPEND	把写入数据追加在文件的末尾
			O_TRUNC		把文件长度设置为0,丢弃已有的内容
			O_CREAT		如果需要,就按参数mode中给出的访问模式创建文件
			O_EXCL		与O_CREAT一起使用,确保调用者创建出文件

使用O_CREAT标志的open调用创建文件时,open函数接受第三个参数mode

			模式		说明
			S_IRUSR		读权限,文件属主
			S_IWUSR		写权限,文件属主
			S_IXUSR		执行权限,文件属主
			S_IRGRP		读权限,文件所属组
			S_IWGRP		写权限,文件所属组
			S_IXGRP		执行权限,文件所属组
			S_IROTH		读权限,其他用户
			S_IWOTH		写权限,其他用户
			S_IXOTH		执行权限,其他用户

close()

头文件:	#include "unistd.h"			//#include "unistd.h"必须首先出现,因为它定义的与POSIX规范有关的标志可能影响其他头文件。

read()

头文件:	#include "unistd.h"
函数原型:	size_t read(int fildes, void* buf, size_t nbytes);
函数作用:	从文件fildes读入nbytes个字节的数据,放入数据区buf中。返回实际读入的字节数,可能会小于nbytes。
函数返回:	返回0,表示未读入任何数据;返回-1,在调用中出现了错误。

write()

头文件:	#include "unistd.h"
函数原型:	size_t write(int fildes, const void* buf, size_t nbytes);
函数作用:	把缓冲区buf的前nbytes个字节写入文件fildes。返回实际写入的字节数,可能会小于nbytes。
函数返回:	返回0,表示未写入任何数据;返回-1,在调用中出现了错误,错误代码保存在全局变量errno中。

ioctl()

  头文件:	#include "unistd.h"
  函数原型:	int ioctl(int fildes, int cmd, ...);
  函数作用:	针对描述符fildes执行cmd参数给出的操作。根据操作的不同,可能有第三参数。

lseek()

头文件:	#include "unistd.h"	
		#include "sys/types"
函数原型:	off_t lseek(int fildes, off_t offset, int whence);
返回值:	lseek返回从文件头到文件指针被设置处的字节偏移值,失败时返回-1.参数offset的类型off_t是一个与具体实现有关的整数。

offset参数指定位置,whence参数定义该偏移值的用法。
whence可以取下列值之一:

	SEEK_SET:offset是一个绝对位置
	SEEK_CUR:offset是一个相对于当前位置的一个相对位置
	SEEK_END:offset是一个相对于文件尾的一个相对位置

fstat() stat() lstat()

头文件:	#include "unistd.h"
				#include "sys/stat.h"
				#include "sys/types"
函数原型:	int fstat(int fildes, struct stat* buf);
				int stat(const char * path, struct stat* buf)
				int lstat(const char* path, struct stat* buf)
函数作用:	fstat系统调用返回打开的文件描述符相关的文件的状态信息,该信息将写到一个buf结构中。

相关函数stat和lstat返回的是通过文件名查到的状态信息,它们产生相同的结果。但当文件是一个符号链接时,lstat返回的是该符号链接本身的信息,而stat返回的是该链接指向的文件的信息。
stat结构的成员:

		stat成员		说明
		st_mode			文件权限和文件类型信息
		st_ino			与该文件关联的mode
		st_dev			保存文件的设备
		st_uid			文件属主的UID号
		st_gid			文件属主的GID号
		st_atime		文件上一次被访问的时间
		st_ctime		文件的权限、属主、组或内容上一次被改变的时间
		st_mtime		文件的内容上一次被修改的时间
		st_nlink		该文件上硬链接的个数

stat结构中返回的st_mode标志还有一些与之关联的宏,这些宏包括对访问权限、文件类型标志以及一些用于帮助测试特定类型和权限的掩码的定义。
文件类型标志如下:

			文件类型标志	说明
			S_IFBLK			文件是一个特殊的块设备
			S_IFDIR			文件是一个目录
			S_IFCHR			文件是一个特殊的字符设备
			S_IFIFO			文件是一个FIFO(命名管道)
			S_IFREG			文件是一个普通文件
			S_FLNK			文件是一个符号链接

其他模式标志:

	 		其他模式		说明
			S_ISUID			文件设置了SUID位
			S_ISGID			文件设置了SGID位

解释st_mode标志的掩码:

			掩码			说明
			S_IFMT			文件类型
			S_IRWXU			属主的读写执行权限			
			S_IRWXG			属组的读写执行权限
			S_IRWXO			其他用户的读写执行权限

确定文件类型的宏定义:

			宏定义			说明
			S_ISBLK			测试是否是特殊的块设备文件
			S_ISCHR			测试是否是特殊的字符设备文件
			S_ISDIR			测试是否是目录
			S_ISFIFO		测试是否是FIFO
			S_ISREG			测试是否是普通文件
			S_ISLNK			测试是否是符号链接

测试一个文件代表的不是一个目录,设置了属主的执行权限,并且不再有其他权限

   		struct stat statbuf;
		mode_t modes;
		
		stat("filename", &statbuf);
		modes = statbuf.st_mode;
		
		if(!S_ISDIR(modes) && (modes & S_IRWXU) == S_IXUSR)
		...

dup() dup2()

头文件:	#include "unisted.h"
函数原型:	int dup(int fildes);	int dup2(int fildes, int fildes2);

访问权限:
有几个因素会对文件的访问权限产生影响:open调用给出的mode值与用户掩码umask
umask:当文件被创建时,为文件的访问权限设定一个掩码,确定文件访问权限的范围。它由3个八进制数组成,分别对应用户、组、其他用户的访问权限

			数字	取值	含义
			1		0		允许属主任何权限
					4		禁止属主的读权限
					2		禁止属主的写权限
					1		禁止属主的执行权限
			2		0		允许组任何权限
					4		禁止属组的读权限
					2		禁止属组的写权限
					1		禁止属组的执行权限
			3		0		允许其他用户的任何权限
					4		禁止其他用户的读权限
					2		禁止其他用户的写权限
					1		禁止其他用户的执行权限

标准I/O库:
fopen()

头文件:	#include "stdio.h"
函数原型:	FILE* fopen(const char* filename, const char* mode);

mode参数:

	mode				说明
	“r”或"rb"			以只读方式打开				//字母b代表打开的是二进制文件
	"w"或"wb"			以写方式打开,并把文件长度截断为0
	"a"或"ab"			以写方式打开,新内容追加在文件尾
	"r+"或"rb+"或"r+b"	以更新方式打开(读和写)
	"w+"或"wb+"或"w+b"	以更新方式打开,并把文件长度截断为0
	"a+"或"ab+"或"a+b"	以更新方式打开,新内容追加在文件尾

fread()
头文件: #include “stdio.h”
函数原型: size_t fread(void* ptr, size_t size, size_t nitems, FILE* stream);

fwrite()
头文件: #include “stdio.h”
函数原型: size_t fwrite(const void* ptr, size_t size, size_t nitms, FILE* stream);

fcolse()
头文件: #include “stdio.h”
函数原型: int fcolse(FILE* stream)

fflush()
头文件: #include “stdio.h”
函数原型: int fflush(FILE* stream) //作用是把文件流里所有未写出数据立刻写出,调用fclose隐含执行了一次fflush操作

fseek()
头文件: #include “stdio.h”
函数原型: int fseek(FILE* stream, long int offset, int whence);

fgetpos() //获得文件流的当前读写位置

fsetpos() //设置文件流的当前读写位置

ftell() //返回文件流当前读写位置的偏移值

rewind() //重置文件流里的读写位置

freopen() //重新使用一个文件流

setvbuf() //设置文件流的缓冲机制

remove() //相当于unlink函数,但如果参数是一个目录,就相当于rmdir

ferror() //检查文件是否发生了错误,返回非0既出错
函数原型: int ferror(FILE* stream)

feof() //测试是否抵达了文件尾,返回非0既到了文件尾
函数原型: int feof(FILE* stream)

clearerr() //清除文件尾标识和错误标识
函数原型: int clearerr(FILE* stream)

int fileno(FILE* stream) //返回文件流使用的文件描述符,出错返回-1

FILE* fdopen(int fildes, const char* mode) //操作方式等同fopen,失败返回null

getcwd() //把当前目录的名字写到缓冲区buf中,目录名长度超过了size,返回null
头文件: #include “unistd.h”
函数原型: char* getcwd(char* buf, size_t size)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值