Linux系统编程调用:对文件操作

操作系统:管理所有资源,把不同设备和不同程序关联起来
Linux系统编程:在操作系统的环境下编程,使用操作系统提供的系统调用和各种库,对系统资源访问。
      本质:对硬件设备操作
对Linux内核操作的方法: 1.shell脚本  
                  2. 库函数(c语言)
                  3. 应用层系统调用 (还是调用函数)(c语言)

shell脚本是一种操作内核的方法,本文为c语言操作内核

1. Linux C编程方法

1.写好文件(可以再编译器内写)并保存,保存的文件形式为:
		文件名.c
2.终端内编译:
		gcc 文件名.c    ----》        变为:文件名.out
3.终端内运行:
		./文件名.out

2.文件描述符

形式:非负整数(0,1,2 …)
概念: 打开/创建 文件时,系统内核会返回一个文件描述符(返回一个数字),

fd = (open("文件名.txt", O_RDONLY) 

fd就是此文件的 “文件描述符”
这个数字(文件描述符)对应此文件
操作文件,就是操作这些数字

	

程序运行时,系统自动创建三个数字:
	0	  标准输入			
	1 	  标准输出
	2 	  标准输出出错

程序或进程运行的时候,自动分配0 1 2
所以:创建的文件后,返回值的描述符都是从3开始

3.创建文件(open)描述符

3.1 函数组成

头文件:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

打开/创建 文件,并返回文件描述符:

1.存在此文件:
 int open(const char *pathname, int flags);
2.不存在此文件,创建文件:
 int open(const char *pathname, int flags,    mode_t mode);
 			       路径文件名		标志位	文件权限设置(可读、可写、可执行)

编译正确:
		返回值是从3(上文解释了)    
编译错误:
		返回值—1
flags标志位:
 O_RDONLY 	只读
 O_WRONLY 	只写
 O_RDWR 	读写
 O_EXCL 	一般与O_CREAT一起使用,标识如果文件存在则报错
 O_TRUNC 	如果文件存在则清空
 O_APPEND 	如果文件存在则追加
 
 O_CREAT 	文件不存在则创建,需要通过第三个参数设置文件权限
 只有这个采用第二种代码

返回值:
创建文件用的代码是 int (上图代码),所以直接创建一个int类型变量就能接收上述创建代码,这就是返回值

成功:
return 文件描述符   (从3开始,因为012是运行进程的时候就返回过了,按顺序向后递增文件描述符)
失败:
return -1

3.2 函数调用失败时,输出错误信息

头文件及返回值:

#include <errn.h>	  			 	引入 errno全局变量 ,获取错误码			
#include<stdio.h>	   				引入函数perror,    输出错误信息
     perror的返回值类型和传参: 	void perror(const char *s);

errno获取的是个数字,需要查询数字对应哪种错误,不方便
perror获取错误信息,直接得到错误原因

使用代码:

	if( 命令 == 此命令失败时的文件描述符数字)  {
perror("xxxxxx");  } 

	输出结果:
			xxxx:错误信息

4. 关闭文件(close)描述符

操作文件的描述符
头文件及返回值:

#include<unistd.h>						fd:创建文件所返回的文件描述符
	close返回值类型和传参:int close(int fd)			

使用代码:

	    创建文件:(这里为了方便,不写头文件)			
		int fd ;
		fd = open("文件名.txt" ,标志位)			获取文件的描述符
close(fd);

返回值

成功:
return 0;
失败:
return -1

5. 对文件写操作(write)

头文件及返回值:

#include<unistd.h>	
  write返回值类型和传参: ssize_t  wrete ( int fd , const void *buf , size_t cout );
 										文件描述符     数据内容      写入数据字节数
 			 

代码:
1.向终端写数据:

write ( 1 , "hello world" , 12); 
	  写给终端:
	  		  标准输出1

2.向文件写数据:

打开文件:
	int fd ;
	fd = open("文件名.txt", 标志位);      保存文件的 文件描述符

写入数据:
write( fd , "hello world" ,12);

返回值:

成功:
return 数据字节个数;
失败:
return -1;        可以用perror打印错误信息

6. 对文件读操作(read)

基本同上write的函数
区别:

创建一个字符串  用来写入数据   (从fd文件里 ,读取一定字节,放到这个字符串内)
char p[32]="";   


read(文件描述符,   			把读取的数据保存位置的首地址,		读取字节数)
	从终端读入,标准输入符0			 p									30
	写给某文件,用此文件的fd			


成功:
return 数据字节个数;
失败:
return -1;        可以用perror打印错误信息
读取到末尾:
return 0

7. 删除文件(remove)

头文件及返回值:

#include<stdio.h>
	 返回类型及传参	int remove(const char* pathname)
	成功: return 0;
	失败: return -1

代码:

remove( "./文件名");	
		路径
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值