报错解决:
在程序运行出错时,可以在头文件加上#include <errno.h>
在报错的位置输入printf("%d",errno);
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
#include<errno.h>
int main(void)
{
int fd = 0;
int fd1 = 0;
ssize_t ret = 0;
ssize_t nret = 0;
char str[1024*750] = {0};
fd = open("C语言.jpg",O_RDONLY);
fd1 = open("b.jpg", O_WRONLY|O_CREAT|O_TRUNC,0664);
if(-1 == fd)
{
perror("fail to open");
return -1;
}
if(-1 == fd1)
{
close(fd);
printf("%d",errno);
}
printf("%d\n",fd1);
ret = read(fd,str,sizeof(str));
printf("%d\n",ret);
printf("%s",str);
nret = write(fd1,str,sizeof(str));
if(nret == -1)
{
printf("errno is:%d\n",errno);
}
printf("%ld\n",nret);
close(fd);
close(fd1);
return 0;
}
标准IO
1.打开文件 fopen
2.读写文件 fgetc fputc
fgets fputs
fscanf fprintf
fread fwrite
3.关闭文件 fclose
流的定位:
偏移量:读和写都在偏移量之后的位置进行
int fseek(FILE *stream, long offset, int whence);
功能:
设置流的偏移量
参数:
stream:文件流指针
offset:偏移量
whence:
SEEK_SET 文件开头
SEEK_CUR 当前位置
SEEK_END 文件结尾
返回值:
成功返回当前偏移量
失败返回-1
long ftell(FILE *stream);
功能:
获取流的偏移量
void rewind(FILE *stream);
功能:
将流的偏移量重新设置到开头
fseek(fp, 0, SEEK_SET);
文件IO:
1.打开文件 open
2.读写文件 read write
3.关闭文件 close
1.打开文件:
open
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
功能:
打开文件,返回文件描述符
参数:
pathname:文件路径
flags:打开方式
必须包含:O_RDONLY、O_WRONLY、O_RDWR 三个其中之一
O_CREAT 文件不存在创建
O_TRUNC 文件存在清0
O_APPEND 追加
O_EXCL 文件存在报错
O_NONBLOCK 非阻塞
O_ASYNC 异步IO
..
mode:权限
只要有O_CREAT标识,表示需要加上权限:
rwx rwx rwx
rw- rw- r--
110 110 100
0 6 6 4
返回值:
成功返回文件描述符
失败返回-1
文件描述符:很小的非负整数,而且新的文件描述符总是尚未被使用的最小的非负整数
0 STDIN_FILENO -> stdin
1 STDOUT_FILENO -> stdout
2 STDERR_FILENO -> stderr
2.close
int close(int fd);
功能:
关闭文件描述符
成功返回0
失败返回-1
3.write
ssize_t write(int fd, const void *buf, size_t count);
功能:
向文件描述符中写入buf开始的count个字节
参数:
fd:文件描述符
buf:写入的数据
count:写入的字节数
返回值:
成功返回写入的字节数
失败返回-1
4.read
ssize_t read(int fd, void *buf, size_t count);
功能:
从文件描述符中读取数据到buf开始的空间中,最多读取count个字节
参数:
fd:文件描述符
buf:存放数据空间首地址
count:最多读取的字节数
返回值:
成功返回读取的字节数
读到文件末尾返回0
失败返回-1