作者回复: 正解!
作者回复: 很棒!实践出真知!实际上,标准中对 ungetc 的规定是,一个大小为 1 字节的“回退 buffer”是可以被保证的,但是多于一次的连续回退操作能否成功,则完全取决于具体实现。通常来说在实践中,这个 buffer 的大小最小只有标准规定的 1 字节,最大甚至可以达到 4k 字节大小。
作者回复: 这个是不一定的,比如在标准 IO 里,标准错误输出肯定不是全缓冲的。相应的,对于低级 IO 来说,大多数方法都是无缓冲的,但具体使用之前还是最好看一下 man 文档,以防万一。
作者回复: 感谢认可,都是很好的问题!下面是回答: 1. 在 Linux x86-64 系统调用中,有一些是需要结构体对象作为参数的,比如 sys_readv。但传递方式都是通过指针,不会有直接按值传递结构体对象的情况。 2. 在 Linux x86-64 系统调用中,是没有需要通过栈来传参的系统调用的。 3. 我们在后面的课程中还会用到,但不会有专门的章节介绍哈。实际上对于大部分手写汇编,执行效率都是没有编译器产出的汇编高的,所以在日常的 C 编程中并不常用。并且由于内联汇编也会有兼容性问题,包括 asm 关键字的用法我印象里不同编译器的支持程度都是不同的。当然如果需要使用,主要关注具体汇编指令的用法,以及 asm 关键字的用法就可以。前者可以参考具体平台上的具体 manual,后者以 GCC 为例,可以参考:https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
作者回复: 可以使用 fgets 函数哈。
作者回复: 标准 IO 实际上是特指由 ISO C 标准定义的一系列接口,这些接口被定义在 C 标准中。这里你提到的 fcntl 只能算是 POSIX.1-2001 标准中的接口。
作者回复: Linux x86-64 可以在这边查哈:https://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/
作者回复: 看起来是因为没有权限 “Permission denied”。SF 可能是因为文件没有被打开,却执行了 “fclose(fp);”。
作者回复: 感谢认可!^~^
作者回复: 有的,可以参考这个文档:https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html