学习笔记(linux高级编程)4

函数接口

系统IO

         1.open

         open("1.c",O_WRONLY|O_CREAT,0666 );

         int open(const char *pathname, int flags,int mode);

         功能:

             获得一个文件描述符

         参数:

             pathname:文件名

             flags:

             必须项:他们之间是互斥的,所以有且只能有一个

                  O_RDONLY 只读

                  O_WRONLY 只写

                  O_RDWR 读写

             可选项:

             O_CREAT, 创建文件  //这个标志量存在,则需要指定参数 mode(权限)

             O_EXCL,  需要和O_CREAT同时使用,表示新建的文件不存在,成功,否则open就会失败

             O_TRUNC  文件内容清空

             O_APPEND 追加

            //后面

             O_NOCTTY,不是终端设备

             O_ASYNC 异步io,什么时候io不确定,

             O_NONBLOCK 非阻塞

                         

open("1.txt",O_WRONLY|O_CREAT,0666);

文件最终权限

r w x  r w x   r w x 

1 1 0  1 1 0   1 1 0   666

                      ~umask

1 1 1  1 1 1   1 0 1   ~002

---------------------

1 1 0  1 1 0   1 0 0   664

最终文件的权限

~umask & 0666

         返回值:

             成功返回文件描述符 (最近最小未使用)

             失败返回-1

2.write

         char buf[1024];

         ssize_t write(int fdconst  void *buf, size_t count);

         功能:

             通过文件描述符向文件中写一串数据

         参数:

             fd:文件描述符

             buf:要写入文件的字符串的首地址

             count:要写入字符的个数

         返回值:

             成功返回实际写入的个数

             失败返回-1

    Stdin->fileno

Stdout->fileno

3.read

         ssize_t read(int fd, void *buf, size_t count);

         功能:

             通过文件描述符读取文件中的数据

         参数:

             fd:文件描述符,要读取的文件

             buf:存放数据空间的首地址

             count:要读到数据的个数

         返回值:

             成功返回读到数据的个数

             失败返回-1

             读到文件结尾返回0

4.lseek

         off_t lseek(int fd, off_t offset, int whence);

         功能:

             定位文件的位置

         参数:

             fd:文件描述符

             offset:偏移量

                          正:向后偏移

                          负:向前偏移

                          零:不偏移

             whence:

                  SEEK_SET

                  SEEK_CUR

                  SEEK_END

                           正 空洞

         返回值:

             成功返回偏移量

             失败返回-1

             lseek(fd,0,SEEK_END);

            

             off_t len =lseek(fd,0,SEEK_END); //获取到文件的大小

注意:

    1、不支持O_APPEND的追加模式,无法生成空洞文件。

    2、lseek函数执行失败,文件指针还在偏移前的位置。

    3、lseek函数在设备文件上偏移无效。

    4、fifo,socket

系统IO和文件IO转换

fileno      FILE* fp -> int fd

int fileno(FILE *stream);

功能:

    获得一个文件流指针中的文件描述符

参数:

    stream:文件流指针

返回值:

    成功返回文件描述符

    失败返回-1

fdopen   int fd -> FILE *fp

 FILE *fdopen(int fd, const char *mode);

 功能:

    将文件描述符转化为文件流指针

 参数:

    fd:已经打开的文件描述符

    mode:

         "r"

         "r+"

         "w"

         "w+"

         "a"

         "a+"

 返回值:

    成功返回文件流指针

    失败返回NULL

目录操作

1.opendir

DIR *opendir(const char *name);

功能:

    打开一个目录获得一个目录流指针

参数:

    name:目录名

返回值:

    成功 返回目录流指针

    失败 返回NULL

2.readdir

struct dirent *readdir(DIR *dirp);

功能:

    从目录流中读取文件信息并将保存信息的结构体

    地址返回

参数:

    dirp:目录流指针

返回值:

    包含文件信息的结构体

    出错或者读到目录流末尾返回 NULL

On Linux, the dirent structure is defined as follows:

       struct dirent {

            ino_t          d_ino;       /* inode number * 索引节点号/

            off_t          d_off;       /* offset to the next dirent */

            unsigned short d_reclen;    /* length of this record */

            unsigned char  d_type;      /* type of file;

                                           not supported

                                              by all file system types */

            char           d_name[256]; /* filename */

       };

3、关闭目录

 int closedir(DIR *dirp);

 功能:关闭之前已经打开的目录流对象

 参数:

       opendir的返回结果中目录流对象

 返回值:

        成功  0


         失败   -1;

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值