我知道这种类型的问题被问了很多,但似乎没有一个答案有帮助。setenv()
我在 Ubuntu Linux 中通过函数调用设置了一个环境变量。但是,该程序似乎没有使用此环境变量。如果我使用getenv()
它会得到正确的值,但程序的输出是错误的。但是,当我export BLOCKSIZE=512
在 shell 中使用时,程序的输出是正确的。我没有从程序中产生不同的进程。下面只是我正在做的代码片段,它不是我的整个程序。
这有什么原因吗?
我知道这种类型的问题被问了很多,但似乎没有一个答案有帮助。setenv()
我在 Ubuntu Linux 中通过函数调用设置了一个环境变量。但是,该程序似乎没有使用此环境变量。如果我使用getenv()
它会得到正确的值,但程序的输出是错误的。但是,当我export BLOCKSIZE=512
在 shell 中使用时,程序的输出是正确的。我没有从程序中产生不同的进程。下面只是我正在做的代码片段,它不是我的整个程序。
这有什么原因吗?
这里的问题是 Ubuntu Linux 的默认BLOCKSIZE
值为1024
not 512
。因此,在计算stat
结构中的块(即st_blocks
字段)时,我收到了与正常情况不同的答案,ls
因为在stat
块中仅计算 512 字节块。这意味着我的程序不必考虑环境变量的大小。这里的主要问题是假设 Linux 使用 512 字节的块大小,正如我在教科书中所说的那样。
显示的代码中没有任何内容会受到 BLOCKSIZE 环境变量的影响。
BLOCKSIZE 不会影响任何系统调用。我看不到您在哪里使用 512。诸如ls
使用相同系统调用从 o/s 获取数据的程序,然后根据环境变量的设置调整它们呈现给您的值。但关键是它是由ls
用户代码决定的,而不是由内核代码决定的。
由于您的代码没有调用ls
或任何其他程序,因此不会受到环境变量的影响。