操作系统中用户程序的参数是如何传递给程序的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统中用户程序的参数是如何传递给程序的相关的知识,希望对你有一定的参考价值。

参考技术A

1、按值传递参数

按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。按值传递参数时,需要在参数名前加“ByVal”关键字。

2、按地址传递参数

按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。如果实参是一个常数或表达式,Visual Basic 6.0会按“传值”方式来处理,按地址传递不需要“ByVal”关键字。

3、按数组传递参数

在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组参数在传递时应注意以下两个方面:

在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔;被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。



扩展资料

由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)为应用程序同系统之间的接口。

操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户。

系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。

参考资料来源:百度百科-系统参数

参考资料来源:百度百科-参数传递

将命令行参数和文本文件传递给程序

【中文标题】将命令行参数和文本文件传递给程序【英文标题】:Passing a Command Line Argument and a textfile to a program 【发布时间】:2016-06-20 10:48:05 【问题描述】:

我有一个读取和反向编码任务,我需要传递一个文本文件和一个字符(-L-W),具体取决于操作员是希望按行还是按单词反向返回文本文件。 (我还应该注意,分配要求在代码期间不向用户询问任何内容。必须决定在命令行中需要哪种变体。)

我不需要代码帮助来反转行或单词,但需要帮助来理解如何接收字符和文本文件,然后在代码中使用它们。我尝试在main 上使用参数(int argc, char *argv[]),但无论何时我尝试只传入-L,终端都会显示Command not foundclang: error: argument to '-L' is missing (expected 1 value)

另外,当我的老师将文本文件传递给程序时,他经常使用>。谁能解释一下这个怎么用?

例如。 program.c > hello.txt

然后他最终会在程序中使用那个.txt

【问题讨论】:

你是如何尝试通过 -L 的? 我猜> 用于重定向。如果是这样,./a.out > hoge.txt 表示./a.out 的标准输出将不是终端而是hoge.txt 命令program.c > hello.txt 看起来很奇怪。是否有Cinterpreter(或者编译器隐藏在软件中)直接在他的环境中执行C源文件 请注意,>(和<)是由 shell 处理的 I/O 重定向操作符——程序既看不到操作符也看不到以下文件名。听起来您可能需要:./your-program -L input-file.txt > output-file.txt 作为命令行,-W 作为替代方案。如果既没有指定-L 也没有指定-W,你的程序会做什么?它可能应该默认为一个或另一个。同样,如果没有文件传递,你会怎么做?然后正常行为是读取标准输入。如果传递了许多文件,则依次处理每个文件。查找getopt() 函数。 【参考方案1】:

考虑一下:

program -L < data.txt

program -W < data.txt

cat data.txt | program -L

“-L”或“-W”将位于argv[1]

祝你好运!

【讨论】:

【参考方案2】:

传递命令行参数的思路如下

Argc:为执行而传递的“字符串”(参数)的参数计数器数量。 它总是 1 或更大,因为函数的调用是一个参数。

Argv:参数向量(pointers),是指向命令行接收到的每个参数的指针

程序调用示例

./myprogram -w

argc=2

argv 将有两个指向字符串(char)的指针:

argv[0]="./myprograms"

argv[1]="-w"

现在解决您的问题

通过命令行执行程序时,您有很多选择:

1) 其中之一是提供文件的程序输入(文件将逐个字符传递到以 EOF 或 -1 结尾的标准输入 - 不是 ascii 字符 -) 这些可以通过以下方式完成

./program.c

2)将程序的输出重定向到一个文件

./program.c > hello.txt

您要做的是在传递参数时输入文件,这可以通过以下方式完成

./program.c < hello.txt -L

重要提示:“

argc=2

argv[0]="./program.c"

argv[1]="-L"

如果您需要更多帮助或不清楚的地方,希望这有助于发表评论。祝你的课程好运!!!

【讨论】:

谢谢!这应该对我有帮助。我现在要去健身房,但今晚晚些时候会编写代码。如果我需要更多帮助,我一定会问。 小问题,你将如何实际使用来自./program.c &lt;hello.txt -L 的信息(特别是.txt 文件中的信息。 你应该使用 getchar()、gets(..) 和其他函数来获取字符来管理 stdInput 检查这个链接它的解释很好。tutorialspoint.com/cprogramming/c_input_output.htm

以上是关于操作系统中用户程序的参数是如何传递给程序的的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个要求用户输入“最多”20 个整数并使用传递给函数的参数来输出最大值、最小值和平均值的程序?

如何在 C++ 程序中使用命令行参数?

如何使用来自另一个 kivy 应用程序的参数启动 kivy 应用程序

传递给 Java Socket 程序的参数

如何将参数从Selenium Webdriver传递给JMeter?

如何将命名参数列表传递给打开的 Windows 窗体应用程序