asdf 郭的留言



liujunxin发表于:2008-10-14

还有个问题阿,就是您的程序http://topic.csdn.net/u/20070706/22/64fe6aca-d41c-40f5-aa94-60e62a574951.html         还需要什么地方完善的,您能不能点一下,我试着去完善一下,细节方面也可以,越详细越好,比如错误检测,不过,您用的几个函数,宏,我上网查了,都没查找到错误的返回值。请指教!

liujunxin发表于:2008-10-14

谢谢您,

liujunxin发表于:2008-10-14

http://topic.csdn.net/u/20070706/22/64fe6aca-d41c-40f5-aa94-60e62a574951.html 对不起,我描述错了,您这段代码,运行时候,while循环进不去,我把 if(rfd <=0||wfd <=0)     return 0; 这段屏蔽掉,就出现断错误,而这段代码前的都执行到了。为什么会出现这样的问题呢?怎么样才能实现代码功能呢? 

asdf 郭 回复于:2008-10-14

程序没问题,可以允许,你应该先运行下边那个服务端程序,接着再启动上边那个客户端程序。

asdf 郭 回复于:2008-10-14

刚才说错了,先启动那个都可以,你要有在当前路径下的写权限。因为要创建管道文件。

liujunxin发表于:2008-10-14

http://topic.csdn.net/u/20070706/22/64fe6aca-d41c-40f5-aa94-60e62a574951.html 你好,我是新手,您在这个网页上写了管道通信的两个程序,但是我运行了,却不成功,信息传递不成功,我打开两个终端之后,打开两个文件都堵塞了,信息传递不了,为什么呢?还有我想问问你,你的while(1)循环什么时候退出?我很期待你能知道 

liujunxin发表于:2008-10-14

你好,我是新手,您在这个网页上写了管道通信的两个程序,但是我运行了,却不成功,信息传递不成功,我打开两个终端之后,打开两个文件都堵塞了,信息传递不了,为什么呢?还有我想问问你,你的while(1)循环什么时候退出?我很期待你能知道

zlai_2001发表于:2008-05-08

感谢你回复我的问题:紧急求助:关于循环中的定时器问题
while(1) 

  n=recvfrom(...); 
  if(n  <0) 

   printf("error"); 
   exit(1); 

  alarm(1); 
}  

你把alarm(1)放在recvfrom前边,并且你需要在if(n <0)内加判断,用来区别recvfrome是因为信号退出的。 

alarm设置的信号是一次有效,你其它怎么设置的呀? 
这样的需求,一般用setitimer来设置时钟信号。 

不过不能将alarm(1)放在recvfrom前面,因为要在收到数据包后开始计时,放在前面就不能完成这个功能了。。 
请帮帮忙吧,我实在是不知道该怎样实现这样的功能。。

楚天舒发表于:2007-12-17

非常感谢cceczjxy给我的留言,我好像有点明白了.

在我这边的情况中,所有操作都是用root运行的,所以可能不是原因1.
应该是原因2,不过还是有些问题.例如:1.dlopen使用mmap把.so的内容映射到内存,这时对.so文件的改动应该不会影响进程空间,否则也不会把.so文件删除了,进程还可以运行.所以,直接覆盖.so文件(我使用的是cp命令)只是仅仅影响了文件中数据,而不关系到进程.2.我试验过,即使是用一个完全相同的.so文件覆盖(cp命令),也会产生段错误,这是不是说明
文件中的数据是否改变,和进程空间无关?.3.是不是mmap就是如下这么实现的:你把一个文件映射到进程空间后,你删除,ok,没问题,但是你不能write(cp命令实际上就是使用了write系统调用)这个文件,无论你写什么,否则就有段错误.
以上只是我的一点点理解,还希望cceczjxy多多指点

楚天舒发表于:2007-12-12

我使用dlopen/dlsym打开一个.so文件,并调用其中的函数.

由于.so文件中的函数定义发生了变化,需要在不重新启动进程的情况下更新.so文件

我发现如果直接将新的.so文件覆盖旧的.so文件,程序就发生段错误

如果先删除旧的.so文件, 再将新.so文件复制过来,就可以运行

不知怎么回事? 望各位老大指点, 多谢!

Slackware, 内核2.4, gcc2.95

asdf 郭 回复于:2007-12-13

1,有可能是文件的权限的原因,直接覆盖文件,会保留被覆盖文件的各种权限,删除再拷贝会用新文件的权限. 2,dlopen/dlsym是用的mmap把.so的内容映射到内存中了,并关闭打开的文件,是通过文件的inode来读取实际的内容的,你直接覆盖文件时,文件的inode节点会保留,只是指向的实际内容改变了,这时,再通过映射到内存的指针读时,就会出错的. 删除文件再复制,就不存在那样的问题. 不过,如果.so文件内,对象的位置在替换前后发生变化,也可能出错.

罗虹发表于:2007-08-24

大虾谢谢你帮我解决问题,我是一个刚刚走入软件行业的人,很想和你交个朋友!
我的msn是:lois_lh@hotmail.com,如果赏脸就请加了吧!

asdf 郭 回复于:2007-08-25

抱歉,我不能用msn,只能用邮箱,偶尔可以用用qq, 有事情可以发邮件: cceczjxy@yahoo.com.cn