为什么write()到标准输出不起作用?

时间:2015-02-08 19:33:44

标签: c

为什么行write(1, lol, 1);无法在main函数中运行?它只是空白并且在程序结束时返回值0,但是当我调用函数filecopy(0,1)时,它是否有效?

编辑:我收录了"syscall.h"

int main(void)
{
    ///// filecopy(0,1)
    char lol = 'D';
    write(1, lol, 1);
    return 0;
}

void filecopy(int from, int to)
{
  int n;
  int buf[100];

  while((n=read(from, buf, 100)) > 0)
    write(to, buf, n);
}

2 个答案:

答案 0 :(得分:1)

写入一个地址 - 而不是一个值(http://linux.die.net/man/2/write)。调用write的正确方法是

int main(void)
{
    ///// filecopy(0,1)
    char lol = 'D';
    write(1, &lol, 1);
    return 0;
}

答案 1 :(得分:1)

filecopy()功能中,您接到了write()的权限。

write(to, buf, n);    //buf is a pointer.

在您的main()代码中,问题出在

write(1, lol, 1);      // lol is of type char, it's not an address.

write()的第二个参数应为void *。改为

  write(1, &lol, 1);

强烈建议您在编译器中启用警告,并查看并修复编译器发出的警告。