0

我正在使用基于 SPP 的 IRAF,它是 Fortran 和 C 的混合体。我正在寻找一种在使用ls. 例如,我可以键入ls *hola*是否要列出目录中包含单词 hola 的每个文件。假设我有一个名为的字符串id,其内容是世界 hola。我怎么能引用中的内容id?我正在寻找某种ls id(我知道构造不起作用)返回与ls *hola*.

先感谢您。

编辑:SPP 以某种方式隐藏在互联网上,但在这里你有一个参考手册https://www.mn.uio.no/astro/english/services/it/help/visualization/iraf/SPPManual.pdf虽然我没有在那里找到与该主题相关的任何信息。

4

2 回答 2

1

使用您的 SPP 事物的 C 端,如果您可以访问 C 标头,那么简单的是使用类似的东西

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

    int main(void)
    {
        char* command = "ls";
        char* args = "*.c";
        char line[80];
        sprintf( line, " %s %s\n", command, args );
        system(line);
    };

但是在 C 中dirent.h,您可以找到执行此操作的函数。man opendir在你的机器上试试

OPENDIR(3)                                    Linux Programmer's Manual                                    OPENDIR(3)

NAME
       opendir, fdopendir - open a directory

SYNOPSIS
       #include <sys/types.h>
       #include <dirent.h>

       DIR *opendir(const char *name);
       DIR *fdopendir(int fd);

   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       fdopendir():
           Since glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           Before glibc 2.10:
               _GNU_SOURCE

DESCRIPTION
       The  opendir() function opens a directory stream corresponding to the directory name, and returns a pointer to
       the directory stream.  The stream is positioned at the first entry in the directory.

       The fdopendir() function is like opendir(), but returns a directory stream for the directory  referred  to  by
       the open file descriptor fd.  After a successful call to fdopendir(), fd is used internally by the implementa‐
       tion, and should not otherwise be used by the application.

RETURN VALUE
...
于 2021-02-20T18:20:28.217 回答
0

首先,我建议根本不要使用 SPP(和 IRAF)。IRAF现在已经脱离官方维护,为已弃用的软件编写新代码可能是一条死胡同。

关于您的问题:SPP 带有一个功能fntopnb(),用于 IRAF 样式访问文件名模板。它们记录在第 101 页。SPP 手册。可以在pkg/system/files.xIRAF 的来源中找到一个使用示例:

call salloc (fname, SZ_FNAME, TY_CHAR)

list = fntopnb ("*id*", NO)
while (fntgfnb (list, Memc[fname], SZ_FNAME) != EOF) {
    call printf ("%s\n")
    call pargstr (Memc[fname])
}

call fntclsb (list)
于 2021-05-16T15:46:23.937 回答