一般网站建设都用什么字体,建设企业网站前市场分析,大庆建设中等职业技术学校网站,手机app前端开发工具文件的创建和读写 当我们需要打开一个文件进行读写操作的时候#xff0c;我们可以使用系统调用函数open。使用完成以后我们调用另外一个close函数进行关闭操作。 该函数使用的头文件如下#xff1a; #include fcntl.h #include unistd.h #include sys/ty…文件的创建和读写 当我们需要打开一个文件进行读写操作的时候我们可以使用系统调用函数open。使用完成以后我们调用另外一个close函数进行关闭操作。 该函数使用的头文件如下 #include fcntl.h #include unistd.h #include sys/types.h #include sys/stat.h 定义函数 int open(const char *pathname,int flags); int open(const char *pathname,int flags,mode_t mode); int close(int fd); 函数说明 open函数有两个形式。其中pathname是我们要打开的文件名(包含路径名称缺省是认为在当前路径下面)。flags可以取下面的一个值或者是几个值的组合。 O_RDONLY以只读的方式打开文件。 O_WRONLY以只写的方式打开文件。 O_RDWR以读写的方式打开文件。 O_APPEND以追加的方式打开文件。 O_CREAT创建一个文件。 O_EXEC如果使用了O_CREAT而且文件已经存在,就会发生一个错误。 O_NOBLOCK以非阻塞的方式打开一个文件。 O_TRUNC如果文件已经存在则删除文件的内容。 前面三个标志只能使用任意的一个。如果使用了O_CREATE标志那么我们要使用open的第二种形式。还要指定mode标志用来表示文件的访问权限。mode可以是以下情况的组合。 ----------------------------------------------------------------- S_IRUSR 用户可以读 S_IWUSR 用户可以写 S_IXUSR 用户可以执行 S_IRWXU 用户可以读写执行 ----------------------------------------------------------------- S_IRGRP 组可以读 S_IWGRP 组可以写 S_IXGRP 组可以执行 S_IRWXG 组可以读写执行 ----------------------------------------------------------------- S_IROTH 其他人可以读 S_IWOTH 其他人可以写 S_IXOTH 其他人可以执行 S_IRWXO 其他人可以读写执行 ----------------------------------------------------------------- S_ISUID 设置用户执行ID S_ISGID 设置组的执行ID ----------------------------------------------------------------- 我们也可以用数字来代表各个位的标志。Linux总共用5个数字来表示文件的各种权限。 00000第一位表示设置用户ID第二位表示设置组ID第三位表示用户自己的权限位第四位表示组的权限最后一位表示其他人的权限。 每个数字可以取1(执行权限)2(写权限)4(读权限)0(什么也没有)或者是这几个值的和。比如我们要创建一个用户读写执行组没有权限其他人读执行的文件。 设置用户ID位可以使用的模式是 1(设置用户ID)0(组没有设置)7(124)0(没有权限,使用缺省) 5(14) 即10705 open(temp,O_CREAT,10705); 如果我们打开文件成功open会返回一个文件描述符。对文件的所有操作就可以对这个文件描述符进行操作。 当我们操作完成以后我们要关闭文件了只要调用close就可以了其中fd是我们要关闭的文件描述符。 文件打开了以后就可以对文件进行读写了。可以调用函数read和write进行文件的读写。 该函数使用的头文件 #include unistd.h 函数定义 ssize_t read(int fd, void *buffer,size_t count); ssize_t write(int fd, const void *buffer,size_t count); 函数说明 fd是我们要进行读写操作的文件描述符buffer是我们要写入文件内容或读出文件内容的内存地址count是我们要读写的字节数。对于普通的文件read从指定的文件(fd)中读取count字节到buffer缓冲区中(记住我们必须提供一个足够大的缓冲区)同时返回count如果read读到了文件的结尾或者被一个信号所中断返回值会小于count。如果是由信号中断引起返回而且没有返回数据read会返回-1且设置errno为EINTR。当程序读到了文件结尾的时候read会返回0。 write从buffer中写count字节到文件fd中成功时返回实际所写的字节数。 2文件的各个属性 文件具有各种各样的属性除了我们上面所知道的文件权限以外文件还有创建时间、大小等等属性有时侯我们要判断文件是否可以进行某种操作(读,写等等)。这个时候我们可以使用access函数。 #include unistd.h int access(const char *pathname,int mode); pathname是文件名称mode是我们要判断的属性。可以取以下值或者是他们的组合。 R_OK文件可以读 W_OK文件可以写 X_OK文件可以执行 F_OK文件存在 当我们测试成功时函数返回0否则如果有一个条件不符时返回-1。如果我们要获得文件的其他属性我们可以使用函数stat或者fstat。 #include sys/stat.h #include unistd.h int stat(const char *file_name,struct stat *buf); int fstat(int filedes,struct stat *buf); struct stat { dev_t st_dev; /* 设备 */ ino_t st_ino; /* 节点 */ mode_t st_mode; /* 模式 */ nlink_t st_nlink; /* 硬连接 */ uid_t st_uid; /* 用户ID */ gid_t st_gid; /* 组ID */ dev_t st_rdev; /* 设备类型 */ off_t st_off; /* 文件字节数 */ unsigned long st_blksize; /* 块大小 */ unsigned long st_blocks; /* 块数 */ time_t st_atime; /* 最后一次访问时间 */ time_t st_mtime; /* 最后一次修改时间 */ time_t st_ctime; /* 最后一次改变时间(指属性) */ }; Stat用来判断没有打开的文件而fstat用来判断打开的文件。我们使用最多的属性是st_ mode。通过着属性我们可以判断给定的文件是一个普通文件还是一个目录连接等等。可以使用下面几个宏来判断 S_ISLNK(st_mode)是否是一个连接S_ISREG是否是一个常规文件S_ISDIR是否是一个目录S_ISCHR是否是一个字符设备S_ISBLK是否是一个块设备S_ISFIFO是否是一个FIFO文件S_ISSOCK是否是一个SOCKET文件。 目录文件的操作 在我们编写程序的时候有时候会要得到我们当前的工作路径。C库函数提供了getcwd来解决这个问题。 #include unistd.h char *getcwd(char *buffer,size_t size); 我们提供一个size大小的buffergetcwd会把我们当前的路径考到buffer中。如果buffer 太小函数会返回-1和一个错误号。 Linux提供了大量的目录操作函数我们学习几个比较简单和常用的函数。 #include dirent.h #include unistd.h #include fcntl.h #include sys/types.h #include sys/stat.h int mkdir(const char *path,mode_t mode); DIR *opendir(const char *path); struct dirent *readdir(DIR *dir); void rewinddir(DIR *dir); off_t telldir(DIR *dir); void seekdir(DIR *dir,off_t off); int closedir(DIR *dir); struct dirent { long d_ino; off_t d_off; unsigned short d_reclen; char d_name[NAME_MAX1]; /* 文件名称 */ mkdir创建一个目录opendir打开一个目录为以后读做准备readdir读一个打开的目录rewinddir是用来重读目录closedir是关闭一个目录telldir和seekdir类似与ftee和fseek函数。转载于:https://www.cnblogs.com/WangYiqiang/p/9561818.html