0

我在 C 中得到了一个代码,它显示了特定路径中的目录列表,我需要在 html 选择中显示这些目录:

/*
 * listdir.c - Leer archivo de un directorio
 */
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

void err_quit(char *msg);

int main(int argc, char *argv[])
{
    DIR *dir;
    struct dirent *mydirent;
    int i = 1;

    if(argc != 2) {
    //puts("USO: listdir {pathname}");
    //exit(EXIT_FAILURE);
    argv[1]="/home/maudev";
    }

    if((dir = opendir(argv[1])) == NULL)
    {
    err_quit("opendir");
    }
    printf("%s%c%c\n","Content-Type:text/html;charset=iso-8859-1",13,10);
    printf("<TITLE>CARPETAS</TITLE>\n");
    printf("<H3>CARPETAS</H3>\n");
    printf("<select>\n");
    while((mydirent = readdir(dir)) != NULL)
    {  
        printf("\n<option value='%s'>%s",mydirent->d_name,mydirent->d_name); 
        printf("</option>\n");
    }
    printf("</select>\n");
    closedir(dir);
    exit(EXIT_SUCCESS);
}

void err_quit(char *msg)
{
    perror(msg);
    exit(EXIT_FAILURE);
}

这是我的代码,默认情况下,我显示来自 /home/maudev/ 的目录列表,它完美地显示了目录列表,但现在我需要选择其中一个文件夹并再次显示文件夹包含的内容,而我没有知道该怎么做,请帮助我。

4

1 回答 1

1

在 HTML 部分中,添加一个form并提交(通过 POST 方法)选定的值:

printf("<form action=\"app.cgi\" method=\"post\">\n");
printf("<select>\n");
while((mydirent = readdir(dir)) != NULL)
{  
    printf("<option value=\"%s\">%s</option>\n", mydirent->d_name, mydirent->d_name); 
}
printf("</select>\n");
printf("<input type=\"submit\">\n");
printf("</form>\n");

在 C 部分,读取stdin并使用 post-data 值:

len_ = getenv("CONTENT_LENGTH");
len = strtol(len_, NULL, 10);
postdata = malloc(len + 1);
if (!postdata) {exit(EXIT_FAILURE);}
fgets(postdata, len + 1, stdin);
/* work with postdata */
free(postdata);
于 2015-10-03T07:37:58.437 回答