IO进程的目录操作

. 文件IO
a.对比一下文件IO和标准IO ***
文件IO是系统调用,标准IO是c语言库函数
文件IO使用文件描述符,标准IO使用FILE*文件流
文件IO不带缓冲,标准IO带缓冲
文件IO多用于操作设备文件,标准IO一般多用于操作普通文件
b. 内核中有一个文件表项,保存了已经打开的文件的相关信息
c. 文件IO要用文件描述符对文件进行操作
文件描述符是一个非负整数,stdin->0, stdout->1, stderr->2
d. 文件操作步骤
[创建]打开文件
操作文件 read/write/ioctl
关闭文件
e. 相关的函数
打开文件
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 : 创建文件时,清空文件内容
O_NONBLOCK or O_NDELAY :非阻塞打开
O_EXCL : 文件存在的情况下创建该文件,会打开失败
mode : 权限,在创建文件的时候,需要指明权限。一般用8进制表示。
返回值:成功时,返回非负整数;失败时,返回-1。
读文件内容
size_t read( int fd, void * buf, size_t size);
参数:
fd : 文件描述符,是open的返回值
buf : 读到的数据保存在buf中
size : 准备读取的数据长度
返回值:成功时,返回读到的字节数;失败时,返回-1。
写内容到文件中
size_t write( int fd, const void * buf, size_t size);
参数:
fd : 文件描述符,是open的返回值
buf : 准备写的数据保存在buf中
size : 准备写的数据长度
返回值:成功时,返回写入的字节数;失败时,返回-1。
关闭文件
int close( int fd );
参数:
fd : 文件描述符,是open的返回值
返回值:成功时,返回0;失败时,返回-1。
2. 空洞文件
新建文件,内容是空的,但大小已经占位。
long lseek( int fd, int offset, int whence );
==> fseek() + ftell();

  1. 文件属性
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>

    int stat(const char *path, struct stat *buf);

    ls是一个可执行文件,在/bin目录; ls -l 本质是运行一个文件,这个文件名叫"ls","-l"相当于给ls传的参数
    ./a.out 1.txt

  2. 目录操作
    目录是一种特殊的文件,它是用于存放其它文件的。
    操作步骤:
    打开目录
    操作目录 读目录、改名、新建文件、删除文件
    关闭目录
    相关的函数
    #include <sys/types.h>
    #include <dirent.h>

     DIR *opendir(const char *name); 
     struct dirent *readdir(DIR *dirp);
     int closedir(DIR *dirp);
     int rename(const char *oldpath, const char *newpath);
     int remove(const char *pathname);
    
  3. 静态库和动态库
    什么是库
    可执行代码的二进制形式。
    特点 ****
    什么时候链接
    静态库在编译时链接
    动态库在运行时链接
    在运行程序时,是否需要库
    静态库不需要
    动态库需要
    是否需要移植
    静态库不需要移植
    动态库需要进行移植
    可执行文件size的大小
    静态库编译后的文件size大
    动态库编译后的文件size小
    库文件升级
    静态库需要重新编译可执行文件
    动态库需要移植新的库,不需要重新编译
    制作和使用
    例:将hello.c制作成静态库,main.c调用hello.c中的函数
    静态库
    1. 先将库对应的.c编译成.o文件
    gcc -c hello.c -o hello.o
    2. 将.o文件打包成静态库[静态库的前缀是lib,扩展名.a]
    ar crs libmyLib.a hello.o
    3. 在编译main.c时,链接静态库
    gcc main.c -lmyLib -L./ -o main
    4. 运行可执行文件,进行测试
    ./main
    动态库
    1. 先将库对应的.c编译成.o文件
    gcc -fPIC -Wall hello.c -o hello.o
    2. 将.o文件打包成动态库[动态库的前缀是lib,扩展名.so]
    gcc -shared hello.o -o libHello.so
    3. 编译main.c时,链接动态库
    gcc main.c ./libHello.so -o main
    4. 运行可执行文件,进行测试
    ./main

猜你喜欢

转载自blog.csdn.net/qq_43967317/article/details/107646775