免费注册 查看新帖 |

Chinaunix

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

关于select能否用于普通文件操作的疑问。 [复制链接]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
11 [报告]
发表于 2007-06-02 11:28 |只看该作者
原帖由 NewCore 于 2007-6-2 10:48 发表于 8楼  


现在就是两个进程,一个进程执行system("tar"),另外一个进程去读文件,但是这种方式可行吗|?我测试的结果是什么都读不出来....

可行的,但是在读文件的时候需要用 tail -f 命令。

论坛徽章:
0
12 [报告]
发表于 2007-06-02 11:30 |只看该作者
原帖由 scutan 于 2007-6-2 11:04 发表于 9楼  



你看看你system()函数的返回值, 看其是否正确地执行了.
另外, 你在执行tar的时候, 注意你重定向的文件的路径的问题. 必要时写上绝对路径.


system执行是绝对没有问题的,因为解包后的文件已生成。
tar命令我就是用的绝对路径。

论坛徽章:
0
13 [报告]
发表于 2007-06-02 11:32 |只看该作者
原帖由 MMMIX 于 2007-6-2 11:21 发表于 10楼  

不要用 system,直接用 fork+exec 来执行 tar 命令,然后通过管道来传递数据。


我开始就是用得这样的标准揭发,但是因为我上面说的原因,system执行的结果没有到管道,所以才采用重定向到文件,再读文件的方法。
我马上用exec试一下。

论坛徽章:
0
14 [报告]
发表于 2007-06-02 11:33 |只看该作者
原帖由 MMMIX 于 2007-6-2 11:28 发表于 11楼  

可行的,但是在读文件的时候需要用 tail -f 命令。


c代码里面怎么用tail -f命令读文件?不明白.

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
15 [报告]
发表于 2007-06-02 11:37 |只看该作者
原帖由 NewCore 于 2007-6-2 11:33 发表于 14楼  


c代码里面怎么用tail -f命令读文件?不明白.

呃……还得用重定向,又绕回去了

当然,你也可以自己实现和 tail -f 类似的功能,这个倒是可行。

[ 本帖最后由 MMMIX 于 2007-6-2 11:38 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2007-06-02 12:12 |只看该作者
原帖由 MMMIX 于 2007-6-2 11:37 发表于 15楼  

呃……还得用重定向,又绕回去了

当然,你也可以自己实现和 tail -f 类似的功能,这个倒是可行。


我用execv和execvp试了下,问题一样,没有数据到管道...

我来看看tail -f怎么用,好不好实现。

有没有其他思路|?难道不能重定向到管道,这个还真变成impossible mission了....

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
17 [报告]
发表于 2007-06-02 13:25 |只看该作者
原帖由 NewCore 于 2007-6-2 12:12 发表于 16楼  


我用execv和execvp试了下,问题一样,没有数据到管道...

我来看看tail -f怎么用,好不好实现。

有没有其他思路|?难道不能重定向到管道,这个还真变成impossible mission了....

呃,我觉得你应该检查下其他的方面,例如说 tar 有没有输出,你是不是错把标准错误当作标准输出了等等。再不然就把你不能工作的代码精简成一个完整的例子贴上来。

论坛徽章:
0
18 [报告]
发表于 2007-06-02 16:28 |只看该作者
类似tail -f,有新数据就读,否则等待
有很多情况没有判断,演示而已

  1. int main()
  2. {
  3.         int fd = open( "hello", O_RDWR |  O_CREAT, 0755 );
  4.         char buf[4096] = {};
  5.         int filesize = 0;
  6.         struct stat st;
  7.         while( 1 )
  8.         {
  9.                 fstat( fd, &st );
  10.                 if( st.st_size > filesize )
  11.                 {
  12.                         filesize = st.st_size;
  13.                         bzero( buf, sizeof( buf ) );
  14.                         int retval = read( fd, buf, sizeof( buf ) - 1 );
  15.                         printf( "%s\n", buf );
  16.                 }
  17.                 else
  18.                 {
  19.                         printf( "no new data\n" );
  20.                         sleep( 1 );
  21.                 }
  22.         }

  23.         return 0;
  24. }
复制代码

[ 本帖最后由 isnowran 于 2007-6-2 16:30 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2007-06-02 20:24 |只看该作者
请重定向到命名管道,而不是普通文件。

论坛徽章:
0
20 [报告]
发表于 2007-06-02 21:09 |只看该作者
我谢大家的关注,我已解决了此问题。还是采用子进程system("tar > file"),父进程从文件读的方式,不过有些细节还需要特殊处理下。

to isnowran:
方法不错,我记下了,以后也许会有用到的时候。

to SuperZ:
谢谢你的回复,不过请看完前面的帖子再说,否则随便答复,你不觉得很不负责任吗?

anyway, 该问题暂时算告一段落。3ks all.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP