linux中标准I/O 文件I/O 及库

                                                                               标准 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刷新

 

你可能感兴趣的:(linux命令,标准I/O,文件I/O,库)