Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shell中C程序的调用_C - Fatal编程技术网

shell中C程序的调用

shell中C程序的调用,c,C,在报告中,有一个问题如下: 根据调用程序时使用的名称,编写一个程序,将大写字母转换为小写字母,反之亦然 在给出的解决方案中,它表示当调用名为lower的程序时,程序将lower转换为upper。在解决方案中,argv[0]与“lower”相比较,但在Linux上,argv[0]将是“/lower”,而不是“lower” 有人能澄清一下吗?考虑一下这个测试代码: #include <stdio.h> int main(int argc, char** argv) { printf(

在报告中,有一个问题如下:

根据调用程序时使用的名称,编写一个程序,将大写字母转换为小写字母,反之亦然

在给出的解决方案中,它表示当调用名为
lower
的程序时,程序将
lower
转换为
upper
。在解决方案中,
argv[0]
“lower”
相比较,但在Linux上,
argv[0]
将是
“/lower”
,而不是
“lower”


有人能澄清一下吗?

考虑一下这个测试代码:

#include <stdio.h>
int main(int argc, char** argv) {
  printf("ARGV[0] = %s\n", argv[0]);
}

因此,您希望根据正则表达式或子字符串测试字符串。

Shell如何执行您的程序?(下面是非常简单的解释)

这意味着加载程序的所有参数都是由shell和 调用加载器,默认情况下,argv[0]与程序的路径名/文件名相同

现在说./a.out..表示程序的绝对路径名为./a.out。(当前目录中的文件a.out)

我们可以省略吗?答案是肯定的,如果环境变量路径有。正如它的一个组成部分所说的第一个组成部分

您可以通过在shell提示符中键入echo$PATH来查看PATH变量的内容。(A:将显示单独的路径列表)

如果。您可以通过在shell提示符中键入export PATH=.:$PATH来添加它

在此之后,您可以通过键入a.out从当前目录运行代码,而无需键入。/a.out

现在我想这很清楚了,为什么argv[0]会成为您正在执行的文件名

现在我们可以为argv[0]使用不同的名称而不是文件名了吗

答案是肯定的,然后您需要自己调用加载程序,即编写一小段行为类似于shell的代码


您可以在internet/手册页上浏览execve函数系列,它实际上就是此处提到的加载程序。

然后使用
argv[1]
。问题是什么?我认为在他们的情况下,他们不使用./因为他们在使用可执行文件时将shell设置为使用当前目录作为相对路径。例如,这类似于只键入ls而不键入/usr/bin/ls。在您的情况下,/指定要在当前目录中使用lower。“.”表示*nix系统中的当前工作目录。@uDaY:K&R或“C编程语言”被认为是C编程的资源和书籍。@Linuxios,噢,谢谢!)@乌代:当然。现在您知道了当您需要C上的权威引用时要查找什么。如果您将可执行文件放在~/bin/或路径上的其他地方,它将运行可执行文件。您还可以使用
path=。test_argv
仅为单个命令设置路径。
% ./test_argv
ARGV[0] = ./test_argv
% test_argv
ARGV[0] = test_argv
% /tmp/test_argv
ARGV[0] = /tmp/test_argv
shell()
{
  loader("Path name/Filename of your program", argv[0], argv[1]...for your program);
}