免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: naker
打印 上一主题 下一主题

UNIX系统编程(10月11号更新 1楼,2楼,11楼,20楼,53楼,54楼) [复制链接]

论坛徽章:
0
31 [报告]
发表于 2006-11-08 11:49 |只看该作者
it is very good !!!
ding!!!!

论坛徽章:
0
32 [报告]
发表于 2006-11-08 13:03 |只看该作者
不错!!

论坛徽章:
0
33 [报告]
发表于 2006-11-08 13:31 |只看该作者
#include<stdio.h>
int main ( int argc , char *argv[] , char *envp[] )
{
        int   i;
        for( i=0 ; envp!=NULL ; i++ )
        {
                printf( "%s\n" , envp );
        }
        return 0;
}


请问一下这个程式里,是怎么实现让envp指向环境变量指针的?
不是要把指针指向环境变量指针environ,并且要声明environ吗?extern char **environ
你的代码我运行了,是可以的。但我想不明白?查资料也没有查出来,请知道的说一下,新学编程。
还有main()函数的参数可以是三个吗?

论坛徽章:
0
34 [报告]
发表于 2006-11-08 13:43 |只看该作者
原帖由 jeromeecho 于 2006-11-8 13:31 发表


请问一下这个程式里,是怎么实现让envp指向环境变量指针的?
不是要把指针指向环境变量指针environ,并且要声明environ吗?extern char **environ
你的代码我运行了,是可以的。但我想不明白?查资料也没有查 ...


libc 会告诉你的 main(),这些参数分别是什么。

论坛徽章:
0
35 [报告]
发表于 2006-11-08 13:59 |只看该作者
没查到,还在研究中。。。。。。

论坛徽章:
0
36 [报告]
发表于 2006-11-08 15:06 |只看该作者

好看

顶,再顶

论坛徽章:
0
37 [报告]
发表于 2006-11-08 15:56 |只看该作者
原帖由 jeromeecho 于 2006-11-8 13:31 发表


请问一下这个程式里,是怎么实现让envp指向环境变量指针的?
不是要把指针指向环境变量指针environ,并且要声明environ吗?extern char **environ
你的代码我运行了,是可以的。但我想不明白?查资料也没有查 ...


在每个程序执行时都接收一张环境表,可以使用自己定义的也可以使用系统的环境表(根据调用不同的exec函数而不同)。所以在main函数的参数中定义一个指向该环境表的指针数组,进而引用环境表。
main函数本来是有三个参数的,但是ANSI C 和POSIX.1都不推荐使用第三个参数,而是用函数getenv()得到它,或者引用全局变量environ.

论坛徽章:
0
38 [报告]
发表于 2006-11-08 17:10 |只看该作者
我收藏了。
楼住支持。

论坛徽章:
0
39 [报告]
发表于 2006-11-08 17:49 |只看该作者
我收了,顶啊!
楼主讲得太精彩,太生动了

论坛徽章:
0
40 [报告]
发表于 2006-11-08 20:08 |只看该作者
编译,执行,看看是不是有一个 zombie,这是因为它父亲还没睡醒,没来得及处理它的后事呢


楼主,这里子进程用exit(1)会可能会导致父进程也退出吧?用_exit(1)是不是更合理一些?
参考:
‘exit()’与‘_exit()’有不少区别在使用‘fork()’,特别是‘vfork()’时变得很
突出。

‘exit()’与‘_exit()’的基本区别在于前一个调用实施与调用库里用户状态结构
(user-mode constructs)有关的清除工作(clean-up),而且调用用户自定义的清除程序
(译者注:自定义清除程序由atexit函数定义,可定义多次,并以倒序执行),相对
应,后一个函数只为进程实施内核清除工作。

在由‘fork()’创建的子进程分支里,正常情况下使用‘exit()’是不正确的,这是
因为使用它会导致标准输入输出(译者注:stdio: Standard Input Output)的缓冲区被
清空两次,而且临时文件被出乎意料的删除(译者注:临时文件由tmpfile函数创建
在系统临时目录下,文件名由系统随机生成)。在C++程序中情况会更糟,因为静
态目标(static objects)的析构函数(destructors)可以被错误地执行。(还有一些特殊情
况,比如守护程序,它们的*父进程*需要调用‘_exit()’而不是子进程;适用于绝
大多数情况的基本规则是,‘exit()’在每一次进入‘main’函数后只调用一次。)

在由‘vfork()’创建的子进程分支里,‘exit()’的使用将更加危险,因为它将影响
*父*进程的状态


这个问题我也不太清楚,不敢妄言,但我知道至少vfork时应该用_exit()。但一般情况下fork后用exit也没见出什么问题。
这个还是留给高手解答吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP