1.文件描述符 int fd;
系统中存在的:
0 标准输入 从键盘读取输入
1 标准输出 输出到屏幕
2 标准错误
例子
read(0,buf,size); 从键盘读取size个字节,放在buf中,类似scanf
write(1,buf,size); 把 buf 输出到屏幕
2. API
头文件: 可以使用man man2查找
#include <sys/types .h>
#include <sys/stat. h>
#include <fcntl. h>
#include <unistd.h>
2.1 打开文件 open
原型
int fd=open(char * pathname,flage):
int fd=open(char * pathname,flage,权限):
返回:文件描述符
2.11 char * pathname
可直接填写路径 如:"文件名+路径"
也可,定义一个char *f2="文件名+路径" ,open(f2,flage);
只能是当前路径下的文件路径 如:./fffd
2.12 flage
不加权限
O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWR 可读可写打开
加权限,用上面的 一个(三选一) 或 下面的 多个进行“或”运算, |
O_CREAT
若文件不存在则创建它。要说明mode,用其说明该新文件的存取许可权限。
O_EXCL
同时指定O_CREAT时,如果打开的文件已经存在,则返回-1。
O_APPEND
打开文件时,如果这个文件中本来是有内容的,默认把光标移动到文件的尾端,并另起一行。 即:打开后,在文件尾端,另起一行操作。防止当前输入”覆盖“原字节
O_TRUNC
打开文件时,如果这个文件中本来是有内容的,清空文件中的内容,重新输入
2.13权限
r 读取 代表数字 4
w 写入 代表数字 2
x 执行 代表数字 1
如:0600\0700\0100
2.3. 读写 write /read
2.31Write
原型: write(int fd, const void *buf, size t count); 文件描述符 ,输入的东西,大小
write(fd,buf,strlen(buf));
返回:如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中
2.32read
原型: read(int fd, void* buf, size t count); 文件描述符 ,读取的东西放在这个地方,大小
返回:返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据。若参数count 为0, 则read()不会有作用并返回0
2.4光标定位 lseek
lseek (int fd,int offset,int whence); 将指针移动到whence相对offset个字节
offset:相对字节数
whence:光标位置
SEEK_SET 头
SEEK_END 尾
SEEK_CUR 当前位置
PS;移动到头、尾、当前位置时, 正数offset 默认向后推移
返回
有返回:返回 ,距离头位置的偏移字节数"
无返回 ;可返,可不返
2.5 关闭 close
close(fd);
2.6 创建 creat
原型
int fd=creat("文件名及路径",mode):
返回:文件描述符
mode
S_IRUSR 4 可读
S_IWUSR 2 可写
S_IXUSR 1 可执行
S_IRWXU 7 可读、写、执行
注意:1.文件写入后光标位置不变,进行read时,需要把光标移动 lseek
2.打开了文件必须关上文件
3.文件路径默认当前路径下:如 wenjian/fffd ,你编辑的文件也在wenjian下,则open路径: ./fffd
参考例子
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
int fd;
int len=1;
int y;
fd=open("./fffg",O_RDWR);
if(fd<0){
printf("open fffg faild\n");
fd=open("./fffg",O_RDWR|O_CREAT,0600);
}
char *du="lidaxia hen shuai !";
len=write(fd,du,strlen(du));
printf("%d %d\n",fd,len);
//光标移动到 距离当前位置向后19
lseek(fd,-19,SEEK_CUR);
char *di=(char *)malloc(sizeof(char)*20+1);
len=read(fd,di,20);
printf("%d %d\n",fd,len);
if(len>=0)
printf("%s\n",di);
close(fd);
}