从C脚本调用Perl脚本,对文本文件进行排序

从C脚本调用Perl脚本,对文本文件进行排序,c,perl,sorting,file-io,C,Perl,Sorting,File Io,我正在制作一个程序,显示一个菜单,并提供排序文件使用多种不同的语言。目前,我有一段代码,可以接收文本文件,对其进行排序,然后将其输出到新的文本文件: # include <stdio.h> # include <string.h> #define MAXNAMELEN 100 #define MAXLINELEN 100 #define MAXITEMS 1000 int main(int argc, char ** argv) { FILE * infil

我正在制作一个程序,显示一个菜单,并提供排序文件使用多种不同的语言。目前,我有一段代码,可以接收文本文件,对其进行排序,然后将其输出到新的文本文件:

# include <stdio.h>
# include <string.h>

#define MAXNAMELEN 100
#define MAXLINELEN 100
#define MAXITEMS 1000

int main(int argc, char ** argv) {

    FILE * infile, * outfile;
    // Statically allocated -- dastardly!
    char name[MAXNAMELEN];
    char line[MAXLINELEN];
    char lines[MAXITEMS][MAXLINELEN];
    int i, items = 0;

    printf("Enter a source filename: ");
    fgets(name, sizeof(name), stdin);
    name[strlen(name)-1] = '\0'; // strip newline
    // No error checking -- ANYWHERE -- dastardly!
    infile = fopen(name, "r");
    while (fgets(line, sizeof(line), infile)) {
            strcpy(lines[items], line);
            items++;
    }

    qsort(lines, items, MAXLINELEN, strcmp);

    printf("Enter a destination filename: ");
    fgets(name, sizeof(name), stdin);
    name[strlen(name)-1] = '\0'; // strip newline
    outfile = fopen(name, "w");
    for (i=0; i<items; i++) {
        fputs(lines[i], outfile);
    }

    fclose(infile);
    fclose(outfile);
}
#包括
#包括
#定义MAXNAMELEN 100
#定义MAXLINELEN 100
#定义MAXITEMS 1000
int main(int argc,字符**argv){
文件*infile,*outfile;
//静态分配——卑鄙!
字符名[MAXNAMELEN];
字符行[MAXLINELEN];
字符行[MAXITEMS][MAXLINELEN];
int i,项目=0;
printf(“输入源文件名:”);
fgets(名称、尺寸(名称)、标准尺寸);
名称[strlen(name)-1]='\0';//带换行符
//没有错误检查--任何地方--卑鄙!
infle=fopen(名称“r”);
而(fgets(线条、尺寸(线条)、填充物)){
strcpy(行[项目],行);
项目++;
}
qsort(线路、项目、MAXLINELEN、strcmp);
printf(“输入目标文件名:”);
fgets(名称、尺寸(名称)、标准尺寸);
名称[strlen(name)-1]='\0';//带换行符
outfile=fopen(名称,“w”);

对于(i=0;i您可以使用
popen
管道化进程,然后使用
fgets
获取输出:

#include <stdio.h>
#include <stdlib.h>

FILE *popen(const char *command, const char *mode);
int pclose(FILE *stream);

int main(void)
{
    FILE *cmd;
    char result[1024];

    cmd = popen("myperlscript myparams", "r");
    if (cmd == NULL) {
        perror("popen");
        exit(EXIT_FAILURE);
    }
    while (fgets(result, sizeof(result), cmd)) {
        printf("%s", result);
    }
    pclose(cmd);
    return 0;
}
#包括
#包括
文件*popen(const char*命令,const char*模式);
int pclose(文件*流);
内部主(空)
{
文件*cmd;
字符结果[1024];
cmd=popen(“myperlscript myparams”,“r”);
如果(cmd==NULL){
佩罗尔(“波本”);
退出(退出失败);
}
while(fgets(result,sizeof(result),cmd)){
printf(“%s”,结果);
}
pclose(cmd);
返回0;
}

您能解释一下这里发生了什么吗?我正在读取的文件只是一个名字列表。因此,我的排序perl脚本是用popen调用的,它读取该脚本的结果?那么我的perl脚本必须返回/输出排序数组吗?我不清楚将读取什么。是的,从perl脚本打印(到stdout)