c - 在c中调用write命令时传递整数代替文件描述符

标签 c

void main()
{

     pid_t  pid;
     int    i;
     char   buf[BUF_SIZE];
     fork();
     pid = getpid();
     for (i = 1; i <= MAX_COUNT; i++) {
          sprintf(buf, "This line is from pid %d, value = %d\n", pid, i);
          write(1, buf, strlen(buf));
        // printf("%s",buf);
     }
}

我已经得到了给定的简单代码来显示 c 中的 fork 进程。我注意到,当我在 write 命令中传递任何大于 2 的值代替 1 时,代码不会打印任何内容。为什么会发生这种情况?

最佳答案

您正在程序开始时执行原始 write 调用:

  • 1 是标准输出描述符
  • 2 是标准错误描述符

两者都默认写入控制台(且0为标准输入,无法写入)

其他描述符无效,除非它们是由 open 调用返回的。由于您没有检查 write 的返回值,因此您看不到返回的错误代码(可能是 EBADF,错误的文件描述符)

关于c - 在c中调用write命令时传递整数代替文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53420606/

相关文章:

c - 将字符串中的数字乘以 2

c - 在 Linux 内核中设置或清除位的平台独立方式

C 奇怪的错误与 strcpy 甚至更奇怪的解决方案

c# - 注释会减慢编译语言的速度吗?

c - 按特定顺序读取C文件并查找子字符串

c - 我如何检查这个函数是从哪个文件调用的?

c - 使用指针 C 访问数组中的特定元素

c - 在不创建临时文件的情况下以二进制模式删除记录(C 文件 I/O)

c - 如何在C程序中分离这个数字-51.235

c - RLIMIT_STACK 包含环境变量和命令行参数或独占