-1

我知道这种类型的问题被问了很多,但似乎没有一个答案有帮助。setenv()我在 Ubuntu Linux 中通过函数调用设置了一个环境变量。但是,该程序似乎没有使用此环境变量。如果我使用getenv()它会得到正确的值,但程序的输出是错误的。但是,当我export BLOCKSIZE=512在 shell 中使用时,程序的输出是正确的。我没有从程序中产生不同的进程。下面只是我正在做的代码片段,它不是我的整个程序。

这有什么原因吗?

4

2 回答 2

1

这里的问题是 Ubuntu Linux 的默认BLOCKSIZE值为1024not 512。因此,在计算stat结构中的块(即st_blocks字段)时,我收到了与正常情况不同的答案,ls因为在stat块中仅计算 512 字节块。这意味着我的程序不必考虑环境变量的大小。这里的主要问题是假设 Linux 使用 512 字节的块大小,正如我在教科书中所说的那样。

于 2012-10-06T21:35:21.983 回答
0

显示的代码中没有任何内容会受到 BLOCKSIZE 环境变量的影响。

BLOCKSIZE 不会影响任何系统调用。我看不到您在哪里使用 512。诸如ls使用相同系统调用从 o/s 获取数据的程序,然后根据环境变量的设置调整它们呈现给您的值。但关键是它是由ls用户代码决定的,而不是由内核代码决定的。

由于您的代码没有调用ls或任何其他程序,因此不会受到环境变量的影响。

于 2012-09-24T03:00:31.200 回答