C中的环境变量

时间:2012-09-24 01:13:28

标签: c environment-variables setenv getenv

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

这有什么理由吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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