如何在不使用libc的情况下获取输入或打印输出?我可以使用系统调用,但不知道这是否会有所帮助。
答案 0 :(得分:1)
我使用gdb逐步浏览write(2)
以了解系统如何调用ABI。
无论如何,根本没有libc。请注意,如果没有特殊技巧,cc(1)编译器/链接器前端仍会将您链接到libc,但您不会将其用于任何操作。 C运行时启动代码将进行一些libc调用,但该程序不会。
void mywrite(int fd, const void *b, int c) {
asm("movl $1, %eax");
asm("syscall");
}
int main(void) { const char *s = "Hello world.\n"; return mywrite(1, s, 13), 0; }
答案 1 :(得分:1)
没有与平台无关的方法。实际上,拥有libc
的重点是拥有大多数系统提供的一组功能的通用接口,但是以完全不同的方式这样做。
您最好的选择可能是查阅您当前使用的任何系统的文档。您可以查找操作系统的中断集,然后尝试使用asm
关键字编写汇编指令,告诉操作系统读取输入或显示输出。您可以查看操作系统提供的库,以便在文件描述符上进行输入和输出,然后使用这些函数。或者,您可以查看进程创建库,然后生成一个进程以从控制台读取或写入数据,其中第二个程序使用libc
。但是,这些都不能保证完全可移植。
希望这有帮助!