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