1.系统调用(两种)
(1)系统调用 (2)用户编程接口API
1.1 优势
(1)系统调用直接操作系统核心, 函数库要判断头文件和函数是否存在等步骤效率更低。
(2) 函数库跨平台更好,系统调用无法跨平台(Linux 到 Window 上)。
1.2.系统调用手册查看
在Linux终端中 man 系统调用函数 如果不是 man 2 系统调用函数
2.open系统调用
open 赋值权限时 Ubuntu 有掩码0022
解决方案: 可在程序中加上
umask(0); //解除掩码
返回:open(), openat(), and creat() return the new file descriptor, or -1 if an error occurred (in which case, errno is set appropriately).
翻译:open()、openat()和create()返回新的文件描述符,如果发生错误,则返回-1(在这种情况下,会适当设置errno)。
这种系统调用返回的是fd(文件描述符) 从3 开始 0,1,2 被系统占用;
3.write 写文件
打开写入文件
使用与read类似
4.read 读文件
strlen 会把数据转为字符。
返回: 如果错误返回error 或者 -1;
正确返回读取到的数据数量,如果读取完则;
关闭 close(读文件文件描述符);
关闭顺序:
close(读文件文件描述符);
close(写文件文件描述符);
C++输出:
cin >> ;
cin.get (); 保留换行符 使用strlen() 之后会把换行符给丢掉;
cin.get()不会忽略空格、回车键,而cin>>会忽略空格、回车,直到读取到字符;
cin.getline(); 不保留换换行符
bzero( buf, sizeof(buf) );// 清空buf 内存
5. chown 修改权限
6. mkdir 创建文件夹
7.opendir 打开一个目录 宏定义与取别名 全大写
8. lseek 文件随机读写
一个文件打开之后默认光标都是在文件最开始的位置。
off_t lseek (int fd, off_t offset, int base);
使用lseek 来对搜索的起始位置, 再对光标进行偏移 offset 达到想要的位置。
初始位置base : 三种值
SEEK_SET 文件开始位置
SEEK_CUR 当前光标位置
SEEK_END 文件末尾位置
9. Ubuntu 判断文件属性
以 struct dirent* 结构体来存储访问到的文件信息。
1. 根据以上存储文件信息的结构体中:
dirfanwen->d_type != DT_DIR && dirfanwen->d_type != 24
通过d_type 来判断出 文件夹 与 ” . “ 与 “ .. ” 文件