我的操作系统是 ubuntu 14.04 32 位,我的源程序 test.c 是:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("test.");
return;
}
Run Code Online (Sandbox Code Playgroud)
我用命令编译它:
gcc -S test.c
Run Code Online (Sandbox Code Playgroud)
输出为 test.s 文件。我用命令组装它:
as -o test.o test.s
Run Code Online (Sandbox Code Playgroud)
然后我想将它与 c 标准库静态链接。我搜索了libc.a文件,将其定位在/usr/lib/i386-linux-gnu/libc.a. 所以我试图将它与命令链接:
ld test.o /usr/lib/i386-linux-gnu/libc.a
Run Code Online (Sandbox Code Playgroud)
但出来了很多错误信息:
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048210
/usr/lib/i386-linux-gnu/libc.a(backtrace.o): In function `backtrace_helper':
(.text+0x20): undefined reference to `_Unwind_GetIP'
/usr/lib/i386-linux-gnu/libc.a(backtrace.o): In function `backtrace_helper':
(.text+0x45): undefined reference to `_Unwind_GetGR'
/usr/lib/i386-linux-gnu/libc.a(backtrace.o): In function `backtrace_helper':
(.text+0x50): undefined reference to `_Unwind_GetCFA'
/usr/lib/i386-linux-gnu/libc.a(backtrace.o): In …Run Code Online (Sandbox Code Playgroud) 我正在尝试将汇编代码写入 mbr 以使用 BIOS ISR。我将以下代码写入 mbr,希望在屏幕上打印字符“ABCD”:
mov ah,0x0e
mov bp,0x8000
mov sp,bp
push 'A'
push 'B'
push 'C'
push 'D'
mov al, [0x7ffe]
int 0x10
mov al, [0x7ffc]
int 0x10
mov al, [0x7ffa]
int 0x10
mov al, [0x7ff8]
int 0x10
; infinite loop
jmp $
; padding 0s and set the magic number to make it bootable
times 510 -( $ - $$ ) db 0
dw 0xaa55
Run Code Online (Sandbox Code Playgroud)
这些代码在 bochs 或 qemu 模拟器上运行良好,但是当我写入我的真实磁盘并使用它来引导时,没有打印任何内容。我已经测试过将 %al 寄存器直接设置为 chars ,并且打印效果很好。我使用的是 AMD PhenomII 955 …
我想完全离线下载一些网页,以便稍后查看,只是单个页面,而不是整个网站。但是我在网上找不到可用的解决方案。
\n\n我看到一些建议使用该wget -E -H -k -K -p url命令的答案。但这根本没有解决问题。因为它从其他网站下载很多很多页面。
我\xe2\x80\x99ve也尝试了cURL命令,但该页面没有完全离线保存,当用Firefox打开它时,它不断加载其他地址,因此没有互联网连接就无法查看。
\n\n我只是希望单个页面完全离线,这样即使原始网站关闭我也可以查看它。将示例页面 url 设为:
\n\nhttp://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash\nRun Code Online (Sandbox Code Playgroud)\n 我正在学习覆盆子pi上的C编程,但是我发现我的程序从未成功捕获EOF.我char c=0; printf("%d",c-1);用来测试char类型,发现char类型范围从0到255,作为unsigned short.但EOF定义的stdio.h是(-1).我的Pi上安装了错误的cc包吗?我该怎么解决?如果我手动更改了EOF值stdio.h,还会有进一步的问题吗?
令我担心的是,当我从K&R书中学习时,有一些例子使用了代码while ((c=getchar())!=EOF),我在我的Ubuntu机器上跟着它,它工作正常.我只是想知道现代C语言是否放弃了这种语法,或者我的Raspberry Pi中是否存在冲突?
这是我的代码:
#include <stdio.h>
int main( void )
{
char c;
int i=0;
while ((c=getchar())!=EOF&&i<50) {
putchar(c);
i++;
}
if (c==EOF)
printf("\nEOF got.\n");
while ((c=getchar())!=EOF&&i<500) {
printf("%d",c);
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
即使我将输入重定向到文件,它仍然在屏幕上打印255,永远不会终止此程序.
最后我发现我错了,在K&R书中,它将c定义为int,而不是char.问题解决了.