Linux下用GCC程序修改/etc/profile文件环境变量的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下用GCC程序修改/etc/profile文件环境变量的问题相关的知识,希望对你有一定的参考价值。

也可以用system()函数内嵌shell实现,实现设置好权限后打开/etc/profile文件,如果JAVA_HOME、CLASSPATH、不存在,则在文件尾添加:
export JAVA_HOME=/usr/java/jdk-1_5_0_04
export CLASSPATH=/usr/java/jdk-1_5_0_04/lib/dt.jar:/usr/java/jdk-1_5_0_04/lib/tools.jar
export PATH=/usr/java/jdk-1_5_0_04/bin:$PATH
若已存在,则更新其值为等号后面的路径。
请编写出实现相应功能的C源代码。

3L,我就是想知道如何获取这个系统重要文件的权限,麻烦你告诉我好吗?
你用shell亦可以,反正有system()函数。

参考技术A 1:直接用shell脚本不行?grep + cat +sudo + ...

2:再说不就是个JAVA_HOME吗?二进制程序去修改很不安全,跟病毒似的!
我是不会去运行那些会修改系统重要文件的来路不明的二进制代码的。
3:再说各有各的JAVA_HOME,你不具备修改的权利,用户才有。
你可以在运行你的程序前设定用户环境变量,
但你是没有权利去修改系统配置文件的。
总结:多看看别人怎么做的,不要动不动就C语言实现还要带源码的。
补充:应用程序权限取决于用户的权限,如果是普通用户的话是不可能得到对/etc/profile文件的写操作权限的。
如果一意孤行要用普通用户取得/etc/profile的权限,好像大概可以这么做(年代久远,记不清楚了)
1:先开启一个会话(session),忘了什么函数了
2:(通过某种安全机制漏洞?)调用setuid一类的函数
3:调用哪个函数后大概就取得了最高权限
此外,还有种种的漏洞可以让你获得权限,具体要订阅安全新闻。

所以结论就是:
1:如果用户本身就是root账户登录的,不需要去特意去的权限
2:如果用户帐户是普通权限且在sudoer列表中,可调用sudo
3:Hacking...
参考技术B 最简单的就是,每次想判断各个PATH是否后存在的时候干脆把profile删掉,然后写个新的进行替换。本回答被提问者采纳 参考技术C 问题是什么?

linux下用gcc如何生成预处理汇编等文件

【gcc -E test.c -o test.i------>预处理文件生成.i 文件。】

  1. 1、c语言程序生成过程
  2. C语言程序的生成过程可以简单的分为:编辑、预处理、编译、汇编、链接五个阶断。
  3. 下面所有的操作以hello world程序为例,源码文件命名为t.c,源码内容如下:
  4. #include <stdio.h> 
  5. int main()
  6. {
  7. printf("hello world\n");
  8. return 0;
  9. }
  10. 2

    2、预处理阶断

    预处理阶断是对c源码中的预处理代码进行处理。

    gcc -E -o t.i t.c

  11. 3

    3、编译阶断

    编译阶断是将c源码处理为汇编代码。

    gcc -S -o t.s t.i

    或者

    gcc -S -o t.s t.c

  12. 4

    4、汇编阶断

    汇编阶断是将汇编代码处理为二进制代码。

    gcc -c -o t.o t.s

    或者

    gcc -c -o t.o t.c

  13. 5

    5、链接阶断

    链接阶断将二进制代码打包成一个操作系统可以识别的可执行文件格式,linux是elf格式,windows上是pe格式。

    gcc -o t t.o

    或者

    gcc -o t t.c

    1. 6
    2. 6、运行阶断
    3. 运行阶断,有操作系统的可执行文件加载器负责加载并执行程序。
    4. ./t
    技术分享

以上是关于Linux下用GCC程序修改/etc/profile文件环境变量的问题的主要内容,如果未能解决你的问题,请参考以下文章

在cygwin下用gcc编译一个程序的详细步骤,求详解

linux下用gcc如何生成预处理汇编等文件

Linux里的/etc/inittab文件修改问题

配置linux网络时,用ifconfig和修改/etc/network/interfaces,这两种方法的不同点??

Linux下用GCC

在Linux下用gcc编译hello world