文件描述符 和 文件相关系统调用

冲冲冲 follow me!!!O(∩_∩)O


1.文件描述符

1.非负的整数。
2.表示一个打开的文件。
3.由系统调用(open)返回,被内核空间(后续系统调用)引用。
4.内核每次打开时,都会自动为每个进程自动缺省三个文件描述符:
			1).stdin 0  ------------标准输入
			2).stdout 1 ------------标准输出
			3).stderr 2	-------------标准出错
		这意味着每次开始时,每个进程的文件描述符从3开始。
5.文件描述符的范围介于0到OPEN_MAX之间。

2.文件系统调用

1).open和close

   int open(const char *pathname, int flags);
   int open(const char *pathname,	//路径
  				  int flags, 						//模式(是指对文件内容)
   				  mode_t mode				//文件权限(仅创建文件有效)
	);		//创建/读写文件时都可用次函数

   int creat(const char *pathname,	//路径
    		mode_t mode						//文件权限
    );
	
	int close(
					int fd;		//文件描述符
	);

文件权限(mode)

chmod 777 filename

-rw------- (600) 只有所有者才有读和写的权限

-rw-r–r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限

-rwx------ (700) 只有所有者才有读,写,执行的权限

-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限

-rwx–x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限

-rw-rw-rw- (666) 每个人都有读写的权限

-rwxrwxrwx (777) 每个人都有读写和执行的权限

转载于:https://www.cnblogs.com/dashi/p/4191609.html


模式(flags)

1.O_RDONLY		-只读
2.O_WRONLY		-只写
3.O_RDWR		-读写
4.O_APPEND		-追加
5.O_CREAT		-创建,不存在即创建(已存在即直接打开,并保留原内容,)使用时需要mode参数才有效。
6.O_EXCL		-排斥,已存在即失败。
7.O_TRUNC		-清空,已存在即清空。

2). write

ssize_t write(									//返回成功写入的字节数,否则返回-1
       					int fd,					//文件描述符
       					const void *buf,		//缓冲区
       				 	size_t count			//期望写入的字节数
);

3).read

   ssize_t read(						//返回成功写入的字节数,否则返回-1
   						int fd,			//文件描述符
    					void *buf, 		//缓冲区
    					size_t count	//期望读取的字节数
    );

4).lseek

1.每个打开的文件都有一个与其相关的相关的“文件位置”。(相同文件以不同的模式打开,文件起始位置可能不同,例如指定了O_APPEND 追加,文件位置在最后)
2.lseek函数仅将文件位置记录在内核中,并不引发任何I/0动作。
3.在超越文件尾的文件位置写入数据,将在文件中形成空洞。
4.文件空洞不占用磁盘空间,但被算在文件大小内。

off_t lseek(
			int fd,				//文件描述符
			off_t offset,		//偏移量
 			int whence			//起始位置
 );
//除非文件模式为 O_APPEND追加模式,否则文件位置一律为0。	
SEEK_SRT		文件头
SEEK_CUR		当前位置
SEEK_END		从文件尾

5).dup/dup2

	//成功返回oldfd的副本,失败返回-1
   int dup(int oldfd);		//返回一个未被使用的最小文件描述符,且文件已打开		
   int dup2(int oldfd, int newfd);//可以指定文件描述符的值,若描述符已打开,则先关闭,返回文件描述副本。

在这里插入图片描述
图片为转载 非原创。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值