Linux常用函数

1.        创建文件夹的函数:

                  extern int mkdir(_const char *_path,_mode_t _mode);

                  失败返回-1,成功返回1。

2.        删除文件夹函数:

                  extern int rmdir(_const char *_path);

                  失败返回-1,成功返回1。

3.        write的系统调用:

#include <unistd.h>

size_t  write(int fildes, const void*buf, size_t nbytes);

Example:

     write(2, “Here is somedata\n”, 18);

返回值:

         -1:写入失败;

         非-1:写入字符的个数。

4.        read系统调用:

#include <unistd.h>

size_t read(int filedes, void *buf, size_t nbytes);

返回值:

         -1:读取出错;

         非-1:读入的数据字符个数。

5.        open系统调用

#include <fcntl.h>

#include <sys/types.h>

#include <sys/stat.h>

int open(const char *path, int oflags);

int open(const char *path, int oflags, mode_t mode);

返回值:返回文件描述符。

oflags:     

O_RDONLY

只读

O_WRONLY

只写

O_RDWR

读写

O_APPEND

追加

O_TRUNC

清除文件再写

O_CREAT

按照mode参数来创建文件

O_EXCL

与O_CREAT模式共同使用,确保创建文件

mode:

                  

S_IRWXU

00700权限

代表该文件所有者具有可读、可写及可执行的权限。

S_IRUSR或S_IREAD

00400权限

代表该文件所有者具有可读取的权限。

S_IWUSR或S_IWRITE

00200权限

代表该文件所有者具有可写入的权限。

S_IXUSR或S_IEXEC

00100权限

代表该文件所有者具有可执行的权限。

S_IRWXG

00070权限

代表该文件用户组具有可读、可写及可执行的权限。

S_IRGRP

00040权限

代表该文件用户组具有可读的权限。

S_IWGRP

00020权限

代表该文件用户组具有可写入的权限。

S_IXGRP

00010权限

代表该文件用户组具有可执行的权限。

S_IRWXO

00007权限

代表其他用户具有可读、可写及可执行的权限。

S_IROTH

00004权限

代表其他用户具有可读的权限

S_IWOTH

00002权限

代表其他用户具有可写入的权限。

S_IXOTH

00001权限

代表其他用户具有可执行的权限。

Example:

         Open(“myfile”, O_CREAT,S_IRUSR|S_IXOTH);

6.        close系统调用

#include <unistd.h>

int close(int fildes);

返回值:

         -1:出错;

         0:成功。

7.        设置(一个文件描述符)文件指针的偏移量

#include <unistd,h>

#include <sys/types.h>

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

参数:

         fildes:文件描述符;

         offset: 要设置文件指针要的位置;

         whence:定义偏移值的用法,可取下面值:

SEEK_SET

offset是一个绝对文章

SEEK_CUR

offset是一个相对于当前的相对位置

SEEK_END

offset是一个相对于文件尾的相对位置

8.        文件状态系统调用

#include <unistd.h>

#include <sys/stat.h>

#include <sys/sypes.h>

int fstat(int fildes, struct stat *buf);

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

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

参数:

         fildes:文件描述符

         path:路径;

buf:文件信息结构体变量。

         其中, 如果路径为链接文件,lstat返回的是链接本身的链接,而stat返回的是链接文件指向文件的信息。

         structstat {

                       dev_t         st_dev;       //文件的设备编号

                       ino_t         st_ino;       //节点

                       mode_t        st_mode;      //文件的类型和存取的权限

                       nlink_t       st_nlink;     //连到该文件的硬连接数目,刚建立的文件值为1

                       uid_t         st_uid;       //用户ID

                       gid_t         st_gid;      //组ID

                       dev_t         st_rdev;      //(设备类型)若此文件为设备文件,则为其设备编号

                       off_t         st_size;      //文件字节数(文件大小)

                       unsigned long st_blksize;   //块大小(文件系统的I/O 缓冲区大小)

                       unsigned long st_blocks;    //块数

                       time_t        st_atime;     //最后一次访问时间

                       time_t        st_mtime;     //最后一次修改时间

                       time_t        st_ctime;     //最后一次改变时间(指属性)

};

9.        复制文件描述符,使通过不同的文件描述符访问同一个文件

#include <unistd.h>

int dup(int fildes);

int dup2(int fildes, int fildes2);

10.    向设备发送数据

#include<sys/ioctl.h>

int ioctl(int handle, int cmd,[int *argdx, int argcx]);

功能:控制I/O设备 ,提供了一种获得设备信息和向设备发送控制参数的手段。用于向设备发控制和配置命令 ,有些命令需要控制参数,这些数据是不能用read / write 读写的,称为Out-of-band数据。也就是说,read / write 读写的数据是in-band数据,是I/O操作的主体,而ioctl 命令传送的是控制信息,其中的数据是辅助的数据

返回值:成功为0,出错为-1

参数cmd(部分):

#define _IOC_NRBITS 8 //序数(number)字段的字位宽度,8bits

#define _IOC_TYPEBITS 8 //幻数(type)字段的字位宽度,8bits

#define _IOC_SIZEBITS 14 //大小(size)字段的字位宽度,14bits

#define _IOC_DIRBITS 2 //方向(direction)字段的字位宽度,2bits

#define _IOC_NRMASK ((1 <<_IOC_NRBITS)-1) //序数字段的掩码,0x000000FF

#define _IOC_TYPEMASK ((1 <<_IOC_TYPEBITS)-1) //幻数字段的掩码,0x000000FF

#define _IOC_SIZEMASK ((1 <<_IOC_SIZEBITS)-1) //大小字段的掩码,0x00003FFF

#define _IOC_DIRMASK ((1 <<_IOC_DIRBITS)-1) //方向字段的掩码,0x00000003

#define _IOC_NRSHIFT 0 //序数字段在整个字段中的位移,0

#define _IOC_TYPESHIFT(_IOC_NRSHIFT+_IOC_NRBITS) //幻数字段的位移,8

#define _IOC_SIZESHIFT(_IOC_TYPESHIFT+_IOC_TYPEBITS) //大小字段的位移,16

#define _IOC_DIRSHIFT(_IOC_SIZESHIFT+_IOC_SIZEBITS) //方向字段的位移,30

11.    数据同步函数

#include<unistd.h>

int sync(void);

函数说明:此函数负责将系统缓冲区的内容写回磁盘,以确保数据同步

12.    查询文件系统相关的信息

#include <sys/vfs.h>    /* 或者 <sys/statfs.h> */

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

intfstatfs(int fd, struct statfs *buf);

参数:

path: 位于需要查询信息的文件系统的文件路径名。  

fd: 位于需要查询信息的文件系统的文件描述词。

buf:以下结构体的指针变量,用于储存文件系统相关的信息

struct statfs {

long    f_type;    /* 文件系统类型  */

long    f_bsize;   /* 经过优化的传输块大小  */

long    f_blocks;  /* 文件系统数据块总数 */

long    f_bfree;   /* 可用块数 */

long    f_bavail;  /* 非超级用户可获取的块数 */

long    f_files;   /* 文件结点总数 */

long    f_ffree;   /* 可用文件结点数 */

fsid_t  f_fsid;    /* 文件系统标识 */

long    f_namelen; /* 文件名的最大长度 */

};

返回值:

成功执行时,返回0。失败返回-1,errno被设为以下的某个值:

EACCES: (statfs())文件或路径名中包含的目录不可访问

EBADF     : (fstatfs()) 文件描述词无效

EFAULT     :内存地址无效

EINTR      :操作由信号中断

EIO            :读写出错

ELOOP     : (statfs())解释路径名过程中存在太多的符号连接

ENAMETOOLONG:(statfs()) 路径名太长

ENOENT   :(statfs()) 文件不存在

ENOMEM         :核心内存不足

ENOSYS    :文件系统不支持调用

ENOTDIR :(statfs())路径名中当作目录的组件并非目录

EOVERFLOW:信息溢出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值