我当时正在阅读Kernighan & Ritchie的“C编程语言”( the C Programming Language),并遇到了一些模仿一些Unix命令(也是在Linux中实现的)的程序,比如cat命令。程序接受命令行参数,就像原始的cat命令一样。我只是好奇地想知道它们是否是一回事。如果我错了,如果我错了,任何帮助都将不胜感激。
我最近写了一个C程序,它应该在Linux环境下运行,如下所示;
#include <stdio.h>
#include <stdlib.h>
void main()
{
system("notify-send -u normal -t 200 'You Have received a new message'");
system("cvlc /home/ashenafis/Music/BabyMessage.mp3");
return 0;
}
编译后将可执行文件保存在"/usr/sbin
内核初始化完成。下面是回溯
(gdb) bt
#0 arch_local_irq_enable () at /home/sami/linux/arch/arm64/include/asm/irqflags.h:37
#1 arch_cpu_idle () at /home/sami/linux/arch/arm64/kernel/process.c:126
#2 0xffff8000106eb8d4 in default_idle_call () at /home/sami/linux/kernel/sched/idle.c:94
#3 0xffff8000100d9e3c in cp
我试图访问上一个堆栈中的一个变量,它在Linux中给了我以下错误:
.... terminated by signal SIGSEGV (Address boundary error
然而,在2014年的CS61C讲座中,产出如下:
3
Something Random
在那台机器和我的Linux之间,它是怎么工作的?
为什么它要打印3 first time而不打印second time呢?如果printf不使用这个插槽来做其他事情,那么的行为也应该第二次发生--不是吗?
以下是代码:
#include<stdio.h>
int *ptr() {
几天前,我开始学习操作系统的概念,我已经遇到了一些问题。主要是我对系统调用非常好奇。我了解到,每个操作系统都提供了自己的API (例如Windows for Windows API、Linux for libc等)。
我开始混淆的是包装器函数。例如,Linux有一个fork()包装器函数。这是否意味着此函数中的算法根据操作系统的系统调用表执行系统调用例程?我不明白它是什么意思,它是用C编写的,这是否意味着它使用的是C标准库?或者只是C编译器?另外,为什么C编译器会编译它的标准库,即使有不同种类的编译器,比如GCC,windows,C编译器等等?我很好奇的是,C标准库函数也会调用系统调用,对吧?
我的程序在尝试将“%1”写入字符串时失败。
(gdb) info frame
Stack level 0, frame at 0xb6b3c040:
eip = 0xb7877cdf; saved eip 0xb7858eae
called by frame at 0xb6b3cc50
Arglist at 0x91a1649, args:
Locals at 0x91a1649, Previous frame's sp is 0xb6b3c040
Saved registers:
ebx at 0xb6b3c02c, ebp at 0xb6b3c038, esi at