Linux新手学堂 Linux系统下文件的操作集锦(3)

3.目录文件的操作
在我们编写程序的时候,有时候会要得到我们当前的工作路径。C库函数提供了getcwd来解决这个问题。
#include
char *getcwd(char *buffer,size_t size);
我们提供一个size大小的buffer,getcwd会把我们当前的路径考到buffer中。如果buffer太小,函数会返回-1和一个错误号。
Linux提供了大量的目录操作函数,我们学习几个比较简单和常用的函数。
#include
#include
#include
#include
#include
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_MAX+1]; /* 文件名称 */
mkdir很容易就是我们创建一个目录,opendir打开一个目录为以后读做准备。readdir读一个打开的目录。rewinddir是用来重读目录的和我们学的rewind函数一样。closedir是关闭一个目录。telldir和seekdir类似与ftee和fseek函数。
下面我们开发一个小程序,这个程序有一个参数。如果这个参数是一个文件名,我们输出这个文件的大小和最后修改的时间,如果是一个目录我们输出这个目录下所有文件的大小和修改时间。
#include
#include
#include
#include
#include
#include
#include
static int get_file_size_time(const char *filename)
{
struct stat statbuf;
if(stat(filename,&statbuf)==-1)
{
printf("Get stat on %s Error:%s\n",
filename,strerror(errno));
return(-1);
}
if(S_ISDIR(statbuf.st_mode))return(1);
if(S_ISREG(statbuf.st_mode))
printf("%s size:%ld bytes\tmodified at %s",
filename,statbuf.st_size,ctime(&statbuf.st_mtime));
return(0);
}
int main(int argc,char **argv)
{
DIR *dirp;
struct dirent *direntp;
int stats;
if(argc!=2)
{
printf("Usage:%s filename\n\a",argv[0]);
exit(1);
}
if(((stats=get_file_size_time(argv[1]))==0)||(stats==-1))exit(1);
if((dirp=opendir(argv[1]))==NULL)
{
printf("Open Directory %s Error:%s\n",
argv[1],strerror(errno));
exit(1);
}
while((direntp=readdir(dirp))!=NULL)
if(get_file_size_time(direntp-
closedir(dirp);
exit(1);
)
4.管道文件
Linux提供了许多的过滤和重定向程序,比如more cat
等等。还提供了 |

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/811832a586c329eabebc92f8a8e68c5c.html