【问题标题】:Code writes to 1, but not to stdout?代码写入 1,但不写入标准输出?
【发布时间】:2012-11-02 21:33:12
【问题描述】:

我正在尝试在 sparc32 上运行一些简单的汇编代码,但它不会写入标准输出,无论是 ta 0x00 还是 ta 0x08,都会出现问题:

# as -s gah.s -o gah.o
# ld gah.o -o gah -lc
# ./gah
#
# truss ./gah
execve("./gah", 0xEFFFFE28, 0xEFFFFE30)  argc = 1
[..]
open("/usr/platform/SUNW,SPARCstation-20/lib/libc_psr.so.1", O_RDONLY) Err#2 ENOENT
close(3)                                        = 0
write(1, " H e l l o ,   W o r l d".., 14)      = 14
_exit(0)
# file gah
gah:            ELF 32-bit MSB executable SPARC Version 1, dynamically linked, not stripped
# echo foo > /dev/fd/1
foo
# uname -a
SunOS foobar 5.6 Generic_105181-05 sun4m sparc SUNW,SPARCstation-20
gcc version 2.95.2 19991024 (release)

这可能是一些与链接器相关的问题吗?我似乎在 truss 输出中看到了一个写字。

dis 输出:http://sprunge.us/hMXV

【问题讨论】:

标签: assembly linker sparc


【解决方案1】:

如果您look under the covers,您会看到stdout 只是一个标准文件描述符,它引用文件描述符编号1

换句话说,当您写入stdout 时,您会看到一个操作系统调用,该调用将写入指向文件描述符1

【讨论】:

  • 这个答案可能是一个误解,因为我知道 1 和 stdout 是一样的。但是,我不知道更好地解释我的问题。不过谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2012-04-25
相关资源
最近更新 更多