求教大侠一个perl的问题

求教大侠一个perl的问题

求教大侠一个perl的问题。

最近在学perl,遇到一个问题是关于system 函数的。

在linux下我要用perl 脚本来写一个程序,程序中调用了一个C语言编译好的程序(uum),我想通过perl中的变量给这个C
程序赋值,比如说给它一个文件名让它来操作,然后输出到另一个文件中。
程序中的“ooopp"是一个文件名,里面存了两个数。我想把数写到文件oooppp中。
下面是我的程序:
perl部分:
#!/usr/bin/perl

$file1="oooppp";
$file="ooopp";
system"  /home/lsp/uum   <$file  >$file1";

C语言部分(uum.c):

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
main()
{double a[2];
int i;
char infile[100];
scanf("%s",infile);
FILE *fp;
fp=fopen(infile,"r");
for(i=0;i<=1;i++)
fscanf(fp, "%lf",&a);
printf("  %lf   %lf\n ",a[0],a[1]);

}

其实我是想将perl中的$file的变量赋值给C中的字符数组infile,不过这样写运行时出错了错误如下:
sh: line 1: 12879 Segmentation fault      /home/lsp/uum <ooopp >oooppp

求大侠帮解决
c代码有问题
scanf("%s",infile);
infile不是一个文件,可以用fopen吗?我想知道,来学习一下



QUOTE:
原帖由 dl0622 于 2008-10-18 12:42 发表
scanf("%s",infile);
infile不是一个文件,可以用fopen吗?我想知道,来学习一下

不能,因为infile中是含数字的字符串。(如果能正确赋值给inline,调用fopen:1. $file 中为正确文件名和路径,则能正确打开文件; 2. 返回错误,但这不是楼主想要的)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main()
{
    double a[2];

    int ret = scanf("%lf %lf", &a[0], &a[1]);
    if (ret < 2) {
        printf("Please input two float numbers\n");
        exit(-1);
    }   

    printf("  %lf   %lf\n ", a[0], a[1]);

    exit(0);
}


楼上的好人能说的详细些么?那段C程序如果单独运行的话 是没有问题的,运行后我输入"ooopp",它是会读取那个文件里的数据的,并打印在屏幕上。我是想知道如何能将perl里的变量$file所代表的字符串输入到C程序中,相当于用$file代表键盘上的输入。至于C要实现的功能只是我随便写的。是不是说,要将外部变量传到这个C程序中,C程序里不能用scanf来检测呢??我一直以为是传递方法上出的问题,传递方法上是否有问题呢?
你这样的话 ooopp 并不是命令行参数,而是交互式运行的输入,这两个是完全不同的东西,understand?
想知道命令行参数是什么,去看The c programming language.


QUOTE:
原帖由 kkdiller 于 2008-10-18 16:51 发表
楼上的好人能说的详细些么?那段C程序如果单独运行的话 是没有问题的,运行后我输入"ooopp",它是会读取那个文件里的数据的,并打印在屏幕上。我是想知道如何能将perl里的变量$file所代表的字符串输入到C程序中 ...

system  "/home/lsp/uum <$file  >$file1"; 这么调用并不是传参数给c程序
改为:
system  "/home/lsp/uum $file >$file1";  #$file文件名传给c程序

c程序:int main(int argc, char *argv[]) argv[1]即为$file中的文件名