当前位置:  技术问答>linux和unix

一个关于IO的问题

    来源: 互联网  发布时间:2016-09-08

    本文导语:  第一种:这种不能输出 n = read(fd, buf, 256); write(1, buf, n); 第二种:这种能输出,但是结果有些异常 n = read(fd, buf, 256); printf("%s", buf); 结果:conect 192.168.1.101 OK hello world! zch@zch-laptop:~/桌面/12th$ /桌面/12th$ 就...

第一种:这种不能输出

n = read(fd, buf, 256);
write(1, buf, n);

第二种:这种能输出,但是结果有些异常
	n = read(fd, buf, 256);
printf("%s", buf);

结果:conect 192.168.1.101 OK
hello world!
zch@zch-laptop:~/桌面/12th$ /桌面/12th$
就是命令行的图标有问题

前些天也问了一个关于输出的问题,说是要加fflush(stdout)就正常了,但是也有很多小问题,总是输出不完美
先问一下这两种的原因吧

|
从你打出来的这两个语句来说的话,很正常啊

|
从LZ给出的代码来看语法上是没问题的,但是输出很奇快,我想可能是字符串结尾不是‘’导致的,LZ可试试在调用read之前,加上bzero(buf, sizeof(buf));这句代码, 我想应该不会有问题了,这个是我写的一个例子。

#include 
#include 
#include 
#include 
using namespace std;
int main()
{
    int n;
    char buff[256];

    bzero(buff, sizeof(buff));

    n = read(0, buff, 256);

    write(1, buff, n); 

    printf("%s", buff);
    return 0;
}

至于你说的要加fflush(stdout)就正常了,我想是write和printf缓冲机制不一样导致的。write是无缓冲的,可以立即输出;而printf是行缓冲的,即使用printf时,遇到换行符才会输出缓冲中的字符串,或者程序exit时,自动输出。

|
缓冲机制的差异

|

LZ,这个程序我在自己的机器上测试过,绝对可以输出的,如果有问题,你把输出结果贴出来看下。

|
n = read(fd, buf, 256)
请检查一下这个n是否正常。

假设n为0,
write(1,buf,0) 当然不会有输出,
而printf("%s", buf);只是将缓冲区打印了下。注意,你的缓冲区并没有初始化过,而又没有成功读进内容,打印出来的当然是随机字符了。如果你在读前把buf memset为0,肯定第2种也没输出了……


|

int talk_with_server(int fd)
{
    char buf[256];
    int n;

    n = read(fd, buf, 256);
    write(1, buf, n);
}

上面你的这个函数中,你在n=read()之前,加上bzero(buf, sizeof(buf));同时检查read是否出错,没有出错再write。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 简单问题简单问题简单问题简单问题
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 小问题,急问题,重大问题!!!
  • sharepoint 2010中item.Update()和item.SystemUpdate 修改数据版本问题解决
  • 弱弱的一问,linux下的中文问题及网络问题,分不是问题
  • 八个问题帮你快速了解Docker
  • 请教两个小问题:一个cgywin下使用vi的问题,另一个socket的问题
  • 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
  • 网页的编码问题!或者java的编码问题,由此引出一条解决中文问题的思路
  • nginx Windows版相关问题及使用说明
  • 死锁的问题 多级锁定问题 循环锁定问题
  • vs2010下禁用vmware的方法以及解决vmware插件导致vs2010变慢的问题
  • [问题]双系统出现的问题!求问题的原因和解决办法!
  • Linux下时钟同步问题:Clock skew detected原因分析及解决方法
  • 初学者问题。一个是编译hello world的问题,一个是配置ssh的问题
  • c/c++服务器程序内存泄露问题分析及解决
  • C程序问题:哪个高手帮我解释下下面的问题,主要是a[0]和&[0] 的区别 和编译器的问题??
  • ​部署 Docker 前必须问自己的四个问题
  • swing的问题还是jbuiler的问题??
  • spring的事务类型及spring和hibernate可能导致的问题分析
  • 菜鸟第一次安装红帽子7.2的一箩筐问题。每个问题会开个帖子,各放100分!请有安装经验的老鸟们帮忙解决。第二个问题:什么是LILO?怎么样


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3