使用ls时如何引用字符串内容
How to refer to string content when using ls
我正在使用基于 SPP 的 IRAF,它是 Fortran 和 C 的混合体。我正在寻找一种在使用 ls
时引用字符串内容的方法。例如,如果我想列出目录中包含单词 hola 的每个文件,我可以键入 ls *hola*
。假设我有一个名为 id
的字符串,其内容是 world hola。 id
里面的内容怎么引用呢?我正在寻找某种 ls id
(我知道构造不会起作用),returns 与 ls *hola*
.
中的结果相同
提前致谢。
编辑:SPP 以某种方式隐藏在 Internet 上,但这里有参考手册https://www.mn.uio.no/astro/english/services/it/help/visualization/iraf/SPPManual.pdf,尽管我在那里没有找到与该主题相关的任何信息。
使用 SPP 的 C 端,如果您可以访问 C headers,简单的方法是使用类似
的东西
#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
...
首先,我建议根本不要使用 SPP(和 IRAF)。 IRAF 是 out of official maintainance now,为已弃用的软件编写新代码可能是死胡同。
关于您的问题:SPP 附带一个函数 fntopnb()
用于 IRAF 样式访问文件名模板。它们记录在第 101ff 页。 SPP手册。用法示例可以在 IRAF 的 pkg/system/files.x
来源中找到:
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)
我正在使用基于 SPP 的 IRAF,它是 Fortran 和 C 的混合体。我正在寻找一种在使用 ls
时引用字符串内容的方法。例如,如果我想列出目录中包含单词 hola 的每个文件,我可以键入 ls *hola*
。假设我有一个名为 id
的字符串,其内容是 world hola。 id
里面的内容怎么引用呢?我正在寻找某种 ls id
(我知道构造不会起作用),returns 与 ls *hola*
.
提前致谢。
编辑:SPP 以某种方式隐藏在 Internet 上,但这里有参考手册https://www.mn.uio.no/astro/english/services/it/help/visualization/iraf/SPPManual.pdf,尽管我在那里没有找到与该主题相关的任何信息。
使用 SPP 的 C 端,如果您可以访问 C headers,简单的方法是使用类似
的东西#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
...
首先,我建议根本不要使用 SPP(和 IRAF)。 IRAF 是 out of official maintainance now,为已弃用的软件编写新代码可能是死胡同。
关于您的问题:SPP 附带一个函数 fntopnb()
用于 IRAF 样式访问文件名模板。它们记录在第 101ff 页。 SPP手册。用法示例可以在 IRAF 的 pkg/system/files.x
来源中找到:
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)