大良网站公司,家在平湖 家在深圳,o基础学建网站,做采集网站赚钱头文件包含路径 linux 操作系统分为两大空间#xff1a;用户空间和内核空间
这样划分#xff0c;是为了保护内核的核心组件#xff0c;不被轻易访问和修改 系统调用#xff1a;安全的访问内核空间
其核心是#xff1a;函数API#xff08;API#xff1a;用户编程接口用户空间和内核空间
这样划分是为了保护内核的核心组件不被轻易访问和修改 系统调用安全的访问内核空间
其核心是函数APIAPI用户编程接口
所谓系统调用是指操作系统提供给用户的组“特殊”接口用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务 学习linux应用编程就是学习使用API【API需要阅读手册——参考man手册、linux c手册】 硬件中断 2.
文件编程
文件IO一切皆为文件内核中虚拟文件系统VFS用文件系统来管理
文件IO 文件分为四大类-普通文件、d目录文件、l链接文件和c/b设备文件三小类p管道文件、s套接字和f堆栈文件
都可以用C库函数和API来调用
把一切抽象成文件用统一的方式管理设备和文件节省开发资源用过文件来操作硬件 文件描述符 知道一个文件的id文件指针操作该id就是操作该文件 3.初级IOcreat及异常处理
creat函数 1.宏定义
2.数字【0八进制3位8进制来表示文件的权限r用4标识w用2标识x用1标识】
已经创建的文件不能通过再creat来修改权限 如何获取错误信息 方法一
errno系统全局变量所有应用都可以访问用来保存错误编号整数
使用该变量时要有errno.h这个头文件 方法二perror --------------------常用----------------------- 方法三 open函数
O_WRONLY写 O_RDONLY读 O_RWRD可读可写
O_CREAT不存在就创建【O_EXCEL O_CREAT存在时打开已有的文件就报错】
O_APPEND文件读写位置移到末尾 O_TRUNC文件长度为零清空
O_NONBLOCK非阻塞的方式打开 close函数
假设有两个file descript指向同一个文件可以closefd1/fd2都可以也可以各close一次 read
write
lseek
lseek的返回值是lseek操作后文件读写位置距离文件首的距离字节数以此可以测量文件大小
lseek(fd3, 0, SEEK_END); // 返回值是文件大小字节数
#include unistd.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include string.h
#include stdio.h
#include errno.h
#include stdlib.hint main(int argc, char **argv)
{// int fd1;// fd1 creat(argv[1], S_IRWXU | S_IRWXG | S_IRWXO);
#if 0// 第一种方法if (errno EISDIR){printf(is a directory\n);}// 第二种方法perror(error is:);// 第三种方法printf(%s\n, strerror(errno));#endif// printf(%d\n,fd1);// int fd2open(argv[1],O_RDWR);// printf(%d\n,fd2);// printf(%d\n,close(fd1));// printf(%d\n,close(fd2));int fd3 open(argv[1], O_RDWR | O_CREAT, S_IRWXG | S_IRWXO | S_IRWXU);char buffer[1024];gets(buffer);int w_num;printf(%d\n, w_num write(fd3, buffer, strlen(buffer)));if (w_num -1){printf(write error\n);exit(-1);}//lseek(fd3, 0, SEEK_SET);//lseek(fd3, 0, SEEK_END); // 返回值是文件大小字节数lseek(fd3, -w_num, SEEK_CUR);//将文件读写位置移到开头int r_num;r_num read(fd3, buffer, strlen(buffer));buffer[r_num] \0;printf(read num:%d; read content:%s\n, r_num, buffer);return 0;
}获取文件属性 struct stat file_a1;//1.stat(a.txt,file_a1);printf(stat.size%ld\n,file_a1.st_size);//输出a.txt的大小//2.struct stat file_a2;fstat(fd3,file_a2);printf(fstat.size%ld\n,file_a2.st_size);//输出a.txt的大小//3.struct stat file_a3;lstat(a.txt,file_a3);printf(lstat.size%ld\n,file_a3.st_size);//输出a.txt的大小