标准 I / O
fopen() 函数打开文件的方式
r / rb 只读 文件必须存在
r+ / r+b 读写 文件必须存在
w / wb 只写 文件存在则长度清零 不存在则创建
w+ / w+b 读写 其他 同w
a / ab 同w 且写入的数据会被追加到文件末尾
a+ / a+b 读写 数据在文件末尾追加 其他同a
diff -ruN +第一个文件 +第二个文件 测试文件复制成功与否???
fgetc / fput 可操作文本文件和二进制文件 效率较低
fgets / fputs 只能操作文本文件(原因是当读取到0 默认为终止符) 效率较高
fread / fwrite 推荐使用
fllush(FILE *stream) 强制刷新缓存区
ftell (FILE *stream) 返回当前流
的位置
fseek(FILE *stream, long offset, int whence) 设定流的位置 成功则返回0
whence 参数的设定 三个宏 SEEK_SET / SEEK_CUR / SEEK_END 分别是文件的起始 当前和结尾位置
offset参数是偏移量
#nclude
ferror(FILE *stream) 流是否出错 有错返回1 否则返回0
feof(FILE *stream) 返回1表示文件已经到末尾 否则返回0
#include
fprintf(FILE *stream, const char *fmt......)
ps :把内容写入文件
sprintf(char *s, const char *fmt.....)
ps: 把内容写入缓冲区
sleep()程序休眠 需要添加头文件 #include
#include
time(time *t) 获取当前时间 秒为单位
localltime()
使用时
time_t t;
struct tm *tp;
time(&t);
tp = localtime(&t);
tp->tm_year,tp->tm_mon, tp->tm_mday, tp->tm-hour , tp->tm_min, tp->tm_sec
char ctime(const time_t *timer) 获取时间 返回一个字符串 内容分别是 星期几(英语单词) 月份(英语单词) 一月中的第几天 时分秒 年份
time_t t;
printf("%s", ctime(&t));
#include
int open(const char *path, int oflag,...) 用来打开和创建一个文件 成功则返回文件描述符 失败返回EOF 可以是两个参数 也可以是三个参数 两个参数是打开文件 三个参数是创建文件(多出的参数是用来设置文件权限的)
第二个参数可选项:
O_RDONLY:只读的方式打开文件
O_WRONLY:只写的方式打开文件
O_RDWR:读写的方式打开文件
只能选一个
O_CREAT: 如果文件不存在就创建一个 且需要通过第三个参数设置文件权限
O_EXCL: 如果使用O_CREAT时 文件存在 则这个会返回错误信息 作用是判断文件是否存在
O_TRUNC:如果文件存在 则删除原有数据
O_APPEND:使用这个参数 写入的方式都会被追加到文件尾部
第三个参数 文件权限 以八进制数表示
pS:
if((fd == open("1.txt", O_RDWR | O_CREAT | O_EXCL, 0666)) < 0)
{
if(erron == EEXIST) 通过对全局变量进行判断 可是错误原因
perror("exist error");//文件存在才发生的错误
else
perror("other error ");
}
头文件 #include
int close(int fd) 关闭文件 成功返回0 失败返回EOF
头文件#include
ssize_t read(int fd ,void *buf, size_t count) 成功则返回实际读取到的字节数 失败则返回EOF
读到末尾返回0
#include
ssize_t write(int fd, void *buf, size_t count) 成功返回实际写入的字节 失败返回EOF
count 不应超过buf大小
#include
off_t lseek(int fd , off_t offset , intt whence)
成功返回文件当前读写位置 出错返回EOF
文件I/O
打开目录文件函数
#include
DIR *opendir(const char *name)
读取目录文件函数
#include
struct dirent *readdir(DIR *dirp)
成功则返回一个目录流下的一个目录项 到末尾或者出错会返回NULL
关闭目录文件函数
#include
int closedir(DIR *dirp)
修改文件权限
#include
int chmod(const char *path, mode_t mode)
int fchmod(int fd, mode_t mode)
成功返回0 错误返回EOF
只有root用户才有权限修改文件权限
获取文件属性
#include
int stat(const char *path, struct stat *buf)
int lstat(const char *path, struct stat *buf)
int fstat(int fd, struct stat *buf)
成功返回0 错误返回EOF
stat()是获取目标文件属性
lstat() 是获取链接文件属性
struct stat结构体的一些属性
mode_t st_mode 类型和访问权限
uid_t st_uid 所有者的ID
uid_t st_gid 用户组ID
off_t st_size 文件大小
time_t st_mtime 最后修改时间
静态库
生成静态库
ar crs lib+filename.a filename.o
查看库中函数情况
nm lib+filefilename.a
怎么给一个程序链接一个库
设测试程序为 test.c
gcc -o test test.c -L+库的路径 -l+库文件名称
共享库
生成共享库
gcc -c fPIC filename01.c filename02.c -Wall
gcc -shared -o libcommon.so.1 filename01.o filename.o
数字是版本
为共享库文件创建链接文件
ln -s libcommon.so.1 libcommon.so
测试
gcc -o test test.c -L+库的路径 -l+库文件名称
默认链接共享库 如果想优先链接静态库 在后面加 -static
让系统找到共享库
1. 在环境变量中添加库的路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:+库的路径
2.把库都复制到/lib 或/user/lib)
3.添加到/etc/ld.so.conf.d/*.conf文件 执行ldconfig刷新