Linux系统编程:标准IO操作--索引对应路径下的文件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#define MAX_FILE_NUM 128
#define MAX_PATH_LEN				128
char file_path[MAX_FILE_NUM][MAX_PATH_LEN];
char *pFilePath[MAX_FILE_NUM];
int total_file_num = 0;
//排序文件
void SortFilePath(void)
{
	char *pTemp;
	int i, j, k;
	for (i=0; i<MAX_FILE_NUM && file_path[i]; i++)
		pFilePath[i] = file_path[i];

	for (i=0; i<total_file_num-1; i++)
	{
		if (pFilePath[i] == 0)
			break;
		k = i;
		for (j=i+1; j<total_file_num; j++)
			if (strcmp(pFilePath[k], pFilePath[j]) > 0)
				k = j;
		if (k != i)
		{
			pTemp = pFilePath[i];
			pFilePath[i] = pFilePath[k];
			pFilePath[k] = pTemp;
		}
	}
}
//判断文件路径是否存在
int is_path_exist(const char *root)
{
    DIR *dir;

    dir = opendir(root);
    if (dir == NULL){
    	printf("error!\n");
        return -1;
	}
	closedir(dir);

	return 0;
}
//返回该目录下文件的个数
int get_file_path(const char *root)
{
	int count, status, len;
    DIR *dir;
    struct dirent *ptr;
    dir = opendir(root);
    if (dir == NULL)
	{
        printf("fail to open dir:%s\n", root);
        return -1;
    }
	count=0;
	chdir(root);
    while ((ptr = readdir(dir)) != NULL)
	{
		if (strcmp(ptr->d_name,".") ==0 || strcmp(ptr->d_name,"..")==0) //后面还可以加一个选项,排除文件夹
            continue;
		strcpy(file_path[count], ptr->d_name);
		printf("mount: %s  success!\n",ptr->d_name);
		count++;
		if (count == MAX_FILE_NUM)
			break;
    }
    closedir(dir);
	return count;
}

int main(void)
{
	char *name = "C:/Users/se0803/Desktop/test";
	struct dirent *ptr;
	int ret = is_path_exist(name);
	if(0 == ret)
	  printf("path exist!\n");
	int total_file_num = get_file_path(name);
	printf("total_file_num:%d\n",total_file_num);
	SortFilePath();
	return 0 ;
}

运行结果:

时间: 2024-09-15 11:28:28

Linux系统编程:标准IO操作--索引对应路径下的文件的相关文章

《Linux系统编程(第2版)》——1.4 Linux编程的概念

1.4 Linux编程的概念 本节给出了Linux系统提供的服务的简要概述.所有的UNIX系统,包括Linux,提供了共同的抽象和接口集合.实际上,UNIX本身就是由这些共性定义的,比如对文件和进程的抽象.管道和socket的管理接口等等,都构成了UNIX系统的核心. 本概述假定你对Linux环境很熟悉:会使用shell的基础命令.能够编译简单的C程序.它不是关于Linux或其编程环境的,而是关于Linux系统编程的基础. 1.4.1 文件和文件系统文件是Linux系统中最基础最重要的抽象.Li

《Linux系统编程(第2版)》——2.12 结束语

2.12 结束语 本章讨论了Linux系统编程的基础:文件I/O.在Linux这样遵循一切皆文件的操作系统中,了解如何打开.读.写和关闭文件是非常重要的.所有这些操作都是传统的UNIX方式,很多标准都涵盖它们.

《Linux系统编程(第2版)》——第1章 入门和基本概念 1.1 系统编程

第1章 入门和基本概念 摆在你面前的是一本关于系统编程的书,你将在本书中学习到编写系统软件的相关技术和技巧.系统软件运行在系统的底层,与内核和系统核心库进行交互.常见的系统软件包括Shell.文本编辑器.编译器.调试器.核心工具(GNU Core Utilities)以及系统守护进程.此外,网络服务.Web服务和数据库也属于系统软件的范畴.这些程序都是基于内核和C库实现的,可以称为"纯"系统软件.相对地,其他软件(如高级GUI应用),很少和底层直接交互.有些程序员一直在编写系统软件,而

《Linux系统编程(第2版)》——导读

前言 这本书是关于Linux上的系统编程."系统编程"是指编写系统软件,其代码在底层运行,直接跟内核和核心系统库对话.换句话说,本书的主题是Linux系统调用和底层函数说明,如C库定义的函数. 虽然已经有很多书探讨UNIX上的系统编程,却很少有专注于探讨Linux方面的书籍,而探讨最新版本的Linux以及Linux特有的高级接口的书籍更是凤毛麟角.此外,本书还有一个优势:我为Linux贡献了很多代码,包括内核及其上面的系统软件.实际上,本书中提到的一些系统调用和系统软件就是我实现的.因

《Linux系统编程(第2版)》——1.2 API和ABI

1.2 API和ABI 程序员都希望自己实现的程序能够一直运行在其声明支持的所有系统上.他们希望能在自己的Linux版本上运行的程序也能够运行于其他Linux版本,同时还可以运行在其他支持Linux体系结构的更新(或更老)的Linux版本上. 在系统层,有两组独立的影响可移植性的定义和描述.一是应用程序编程接口(Application Programming Interface,API),二是应用程序二进制接口(Application Binary Interface,ABI),它们都是用来定义

linux系统编程之文件与I/O(六) fcntl函数与文件锁

一.fcntl函数 功能:操纵文件描述符,改变已打开的文件的属性 int fcntl(int fd, int cmd, ... /* arg */ ); cmd的取值可以如下: 复制文件描述符 F_DUPFD (long) 设置/获取文件描述符标志 F_GETFD (void) F_SETFD (long) 设置/获取文件状态标志 F_GETFL (void) F_SETFL (long) 获取/设置文件锁 F_GETLK F_SETLK,F_SETLKW 其中复制文件描述符可参见<linux系

《Linux系统编程(第2版)》——1.5 开始系统编程

1.5 开始系统编程 这一章着眼于Linux系统编程的基础概念并从程序员视角探索Linux系统.下一章将讨论基本的文件I/O,这当然包括读写文件,但是由于Linux把很多接口以文件形式实现,因此文件I/O的至关重要性不仅仅是对于文件而言,对于Linux系统的很多其他方面亦是如此. 了解了这些基础知识后,可以开始深入探索真正的系统编程了.我们一起动手吧.

LINUX系统编程 LINUX 虚拟内存

LINUX 虚拟内存 以32位操作系统为例子,因为64位系统虚拟地址过大为2^64,32位仅仅为2^32=4G更利于描述,但是原理东西都一样 这首先要从程序和进程之间的关系开始,我们一般写好一段C\C++代码编译后仅仅为可执行文件假设为a.out,我们 运行a.out的时候,这个才叫进程,进程是OS级别抽象的实体(PCB task_struct结构体),为程序运行进行各种检查和 系统资源分配,一个PCB包含部分信息如下: (摘至刑文鹏LINUX系统编程讲义) * 进程id.系统中每个进程有唯一的

【Linux系统编程】文件IO操作

文件描述符 在 Linux 的世界里,一切设备皆文件.我们可以系统调用中 I/O 的函数(I:input,输入:O:output,输出),对文件进行相应的操作( open().close().write() .read() 等). 打开现存文件或新建文件时,系统(内核)会返回一个文件描述符,文件描述符用来指定已打开的文件.这个文件描述符相当于这个已打开文件的标号,文件描述符是非负整数,是文件的标识,操作这个文件描述符相当于操作这个描述符所指定的文件. 程序运行起来后(每个进程)都有一张文件描述符