系统调用IO接口与标准IO接口

#include <stdio.h>#include <unistd.h>#include <dirent.h>#include <stdlib.h>int main(int argc, char* argv[]){DIR *dir=NULL;struct dirent *file=NULL;if(argc < 2) //如果没有指定要显示的目录,就显示当前目录的的文件 {dir=opendir();if(!dir){perror();exit(1);}else{while(file=readdir(dir))printf(,file->d_name);}putchar();closedir(dir);exit(0);}dir=opendir(argv[1]);if(!dir){perror();exit(1);}while(file=readdir(dir))printf(,file->d_name);printf();closedir(dir);return 0;}

执行结果如下:

[root@localhost ls]# lsmain.c[root@localhost ls]# gcc -o dir main.c [root@localhost ls]# ./dir dirmain.c …[root@localhost ls]#

6、查看某个文件是否存在

有时需要检测某个文件是否存在。 例如复制文件的时候,既需要检测文件是否存在,存在的话就需要提醒

用户是否需要覆盖。

通过 access( ) 来检测文件是否存在、是否可写等信息。

ACCESS(2)Linux Programmer’s ManualACCESS(2)NAMEaccess – check user’s permissions for a fileSYNOPSIS#include <unistd.h>mode); //要检测的内容,如文件是否存在 F_OK 等

修改后的 cpfile.c 如下

#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#define BUF_LEN 1024int main(int argc, char* argv[]){int fd_src,fd_dst;char buf[BUF_LEN];int ret;int ret_r;if(argc < 3) //参数小于3个,,就打印提示信息 {printf();printf();printf();printf();exit(0);}( ! access(argv[2],F_OK) ){printf(,argv[2]);buf[0]=getchar();== buf[0] )exit(0);}fd_src=open(argv[1], O_RDONLY);if(-1 == fd_src ){strcpy(buf,);strcat(buf,argv[1]);perror(buf);exit(1);}fd_dst=open(argv[2],O_WRONLY|O_CREAT,00666);if(-1 == fd_dst ){strcpy(buf,);strcat(buf,argv[2]);perror(buf);exit(1);}do{memset(buf,0,sizeof(buf));ret_r=read(fd_src,buf,sizeof(buf) );if(-1 == ret){strcpy(buf,);strcat(buf,argv[1]);perror(buf);exit(2);}ret=write(fd_dst,buf,ret_r);if(-1 == ret){strcpy(buf,);strcat(buf,argv[2]);perror(buf);exit(3);}}while( ret_r != 0);close(fd_src);close(fd_dst);return 0;}

7、获取文件的属性

linux中文件具有各种属性,有时需要获取这些文件的信息,例如 ls -l 命令会显示目录下文件的信息。

在linux中可以通过 stat、fstat、lstat 函数获取文件的相关信息。

STAT(2)Linux Programmer’s ManualSTAT(2)NAMEstat, fstat, lstat – get file statusSYNOPSIS#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>stat *buf);fstat(stat *buf);lstat(stat *buf); //输出参数, 用于存储文件信息的结构体指针

返回值:

成功返回0, 失败返回 -1 ;

结构体:

struct stat {dev_tst_dev;ino_tst_ino;mode_t st_mode; nlink_t st_nlink; uid_tst_uid;gid_tst_gid;dev_tst_rdev; off_tst_size; blksize_t st_blksize; blkcnt_t st_blocks; time_t st_atime; time_t st_mtime; time_t st_ctime; };

下面为为改进后的简易 ls 命令源代码: 可以显示更多的信息

鸟儿爱美,不仅需要羽毛之美,还需要鸣声婉转之美;

系统调用IO接口与标准IO接口

相关文章:

你感兴趣的文章:

标签云: