免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: snowboy9859
打印 上一主题 下一主题

求指教:怎样才能从标准输入读入0个字节 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-12-14 17:29 |只看该作者
回复 9# snowboy9859


    低级错误,thanks!ctrl+d是EOF

论坛徽章:
0
12 [报告]
发表于 2010-12-14 17:31 |只看该作者
,没错。

论坛徽章:
0
13 [报告]
发表于 2011-01-28 12:54 |只看该作者
24. Makefile 有三个非常有用的变量.分别是$@,$^,$<代表的意义分别是:
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件.
25.得到一个field在结构体(struct)中的偏移量
定义方法:
#define FPOS( type, field ) ( (dword) &((( type *) )0)-> field )
这个是最郁闷的一个,终于搞定了。。。。郁闷的typedef 和运算规则例题test.c
#include <stdio.h>
typedef unsigned long dword;
#define FPOS( type,field) (dword)&(((type *)0)->field)
typedef struct test
{
int a;
int b;
char c ;
}d;
int main(int argc,char *argv[])
{
printf("offset==%d \n",FPOS(d,b));
}
编译方法:
#gcc -Wall test.c
执行结果
#offset==0x4
“&”的运算级别小于“->”运算级别
特别推荐C 语言运算符表

#define FPOS( type,field) (dword)&(((type *)0)->field)
分析如下:把0强制类型转换为type类型指针所在的地址,再取field的值,例子中为b,&为取址运算符,取b的地址为0x2,再强制类型转换为无符号长整型dword类型,长整形为四字节对齐,原来的空间存放了a,故要重新开辟空间存储b,四字节存储,需要四字节对齐,故可以得到其值为0x4.


26.2=sizeof(short)<=sizeof(int)<=sizeof(long)=4,在上限和下限范围内均属正常情况。

27.web登陆的是bmc的图形化界面,实现功能少,远程控制之后进入的为业务系统,即间接登陆host.业务系统。

28.断言(assert)就是声明某种东西应该为真。当它被执行时,这个宏对表达式参数进行测试。如果它的值为假(零),它就向标准错误打印一条诊断信息并终止程序。这条信息的格式是由编译器定义的,但它将包含这个表达式和源文件的名字以及断言所在的行号。如果表达式为真(非零),它不打印任何东西,程序继续执行。  当程序被完整地测试完毕之后,你可以在编译时通过定义NDEBUG消除所有的断言。你可以用-DNDEBUG编译器命令行选项或者在源文件中头文件assert.h被包含之前增加下面这个定义#define NDEBUG   当NDEBUG被定义之后,预处理器将丢弃所有的断言,这样就消除了这方面的开销,而不必从源文件汇中把所有的断言实际删除。

29.rmdir只能删除空目录。

30. 交换进程(pid 0),init (pid 1)以及页精灵进程(pid 2)。

31.建立samba服务器设置,/usr/sbin/setenforce 0

打开samba服务器配置窗口,首选项->samba用户->添加用户->输入口令
                           添加共享->目录->共享名->访问(设置你允许访问的用户)

32.在幻灯片里面插入图片的快捷方式图标链接
插入对象+链接+显示为图标

论坛徽章:
0
14 [报告]
发表于 2011-01-28 12:55 |只看该作者
16.数组名的值是一个指针常量,也就是数组第一个元素的地址。它的类型取决于数组元素的类型:如果他们是int类型,那么数组名的类型就是“指向int的常量指针”;如果它们是其他类型,那么数组名的类型就是“指向其他类型的常量指针”。数组具有一些和指针完全不同的特征。例如,数组具有确定数量的元素,而指针只是一个标量值。编译器用数组名来记住这些属性。只有当数组名在表达式中使用时,编译器才会为它产生一个指针常量。

17.除了优先级之外,下标引用和间接访问(指针表达式)完全相同。例如 :下标表达式array[value]和间接访问表达式*(array+(value))是一样的。

18.void function( int const a, int const b[] ) { };两种const关键字用法的显著区别:
   第一个参数是个标量,所以函数得到值的一份拷贝。对这份拷贝的修改并不会影响原先的参数,所以const关键字的作用并不是防止原先的参数被修改。第二个参数实际上是一个指向整型的指针,传递给函数的是指针的拷贝,对它进行修改并不会影响指针参数本身,但函数可以通过对指针执行间接访问修改调用程序的值。Const关键字用于防止这种修改。

19.->操作符(箭头操作符)和点操作符一样,箭头操作符接受两个操作数,但左操作数必须是一个指向结构的指针。

20.C语言中的回调函数:用户把一个函数指针作为参数传递给其他函数,后者将”回调”用户的函数。事实上,我们需要查找函数能作用于任何类型的值。解决这个难题的办法是把参数类型声明为void *,表示“一个指向未知类型的指针”。( P283—C和指针)

21.#undef 这条预处理指令用于移除一个宏定义。如果一个现存的名字需要被重新定义,那么它的就定义首先必须用#undef移除。

22.一个常见的调试策略是把一些printf函数的调用散布于程序中,确定错误出现的具体位置。但是这些函数调用的输出结果被写入到缓冲区中,并不立即显示于屏幕上。事实上,如果程序失败,缓冲输出可能不会被实际写入,这就可能使程序员得到关于错误出现位置的不正确结论。这个问题的解决方法就是在每个用于调试的printf函数之后立即调用fflush,如下所示:printf(“something or other”);
          fflush(stdout);
fflush迫使缓冲区的数据立即写入,不管它是否已满。

23.所有的头文件都像下面这样编写
#ifndef  _HEADERNAME_H
#define  _HEADERNAME_H  (#define  _HEADERNAME_H 1亦可)
多重包含的危险就被消除了。当头文件第一次被包含时,它被正常处理,符号_HEADERNAME_H被定义为1.如果头文件被再次包含,通过条件编译,它的所有内容被忽略。符号_HEADERNAME_H按照被包含文件的文件名进行取名,以避免由于其他头文件使用相同的符号而引起的冲突。

论坛徽章:
0
15 [报告]
发表于 2011-01-28 12:58 |只看该作者
6 extern+函数,扩展了该函数的作用域,如果其它文件,包含了有extern+函数声明的头文件的文件可以使用该函数。


7.???for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
                if ((*init_fnc_ptr) () != 0) {
                        hang ();
typedef int (init_fnc_t) (void);:可以理解为init_fnc_t为 int () (void)的类型定义

for循环条件*init_fnc_ptr为空时循环退出
8. ,else总是与它最靠近的没有匹配的if进行匹配
9.source insight代码阅读工具中,添加其他类型的文件,可在如下页面进行加入:
  document options
10.具有external属性的实体在其他语言的术语里称为全局(global)实体,所有源文件中的所有函数均可以访问它。如果一个变量声明于代码块内部,在它前面添加extern关键字将使它所引用的是全局变量而非局部变量。

11. .和->操作符用于访问一个结构的成员。如果a是个结构变量,那么s.a就访问s中名叫a的成员。当你拥有一个指向结构的指针而不是结构本身,且欲访问它的成员时,就需要使用->操作符而不是.操作符。

12.左值就是那些能够出现在赋值符号左边的东西,右值就是那些可以出现在赋值符号右边的东西。记住,左值意味着一个位置,而右值意味着一个值。所以,在使用右值的地方也可以使用左值,但是在需要左值的地方不能使用右值。

13.优先级只对相邻操作符的执行顺序起作用。

14.递归函数调用将涉及一些运行时开销——参数必须压到堆栈中,为局部变量分配内存空间,寄存器的值必须保存。详细说明参照C和指针P150.

15.函数的参数是通过传值方式进行传递的,它实际上所传递的是实参的一份拷贝。因此,函数可以修改它的形参(也就是实参的拷贝),而不会修改调用程序实际传递的参数。数组名也是通过传值方式传递的,但它传给函数的是一个指向该数组的指针的拷贝。在函数中,如果在数组形参中使用了下标引用操作,就会引发间接访问操作,它实际所访问的是调用程序的数组元素。因此,在函数中修改参数数组的元素实际上修改的是调用程序的数组。这个行为被称为传址调用。如果你希望在传递标量参数时也具有传址调用的语义,你可以向函数传递指向参数的指针,并在函数中使用间接访问来访问或修改这些值。

论坛徽章:
0
16 [报告]
发表于 2011-01-28 12:59 |只看该作者
$ at -f work 4pm + 3 days 在三天后下午4点执行文件work中的作业
$例3设置时间为下午14点36分 # date -s 14:36:00 Fri Nov 26 141500 CST 1999 例4设置时间为1999年11月28号 # date -s 991128 Sun Nov 28 000000 CST 1999
$RH2285操作系统启动后,用reboot命令重启,同时按下Ctrl+b可以进入U-boot界面,相关命令可以用?列出,用reset命令可以启动到操作系统界面。
¥正则表达式? 编译开关(类似于如果定义了某个宏,则执行某个操作,否则执行其他操作)?
C和指针344页
(c语言中的链表)

¥请写出一个C函数,实现反转一个单向链接表的功能。
1.问题描述:


1、复位BMC进入Uboot,然后复位单板上的OS,Uboot出现异常信息然后复位,之后单板业务平面也异常复位了(这个已经提单了)
为什么会出现这样的情况?问题出在哪!需不需要改代码?还是没有影响!
寄存器间接寻址时,跳转到了0地址,导致uboot复位,系统复位,这样的几率很小,用户不会进入uboot界面,无影响。

2.source insight 软件,ctrl+/w为查找全部,ctrl+shift+f为在整个文件中查找,ctrl+f表示在当前文件下查找

3. 关于u-boot 的makefile更详细的分析可以参照http://blog.mcuol.com/User/lvembededsys/Article/4355_1.htm

4.比较源代码的时候,多余的.c和.h文件要注意,其他的为编译产生的文件,忽略,一般改动都注明了人,找改动的人问。只引用文件的无意义

5在一段代码的首尾加if 1,endif或if 0,endif,在函数前引用多余的函数extern xx,而后面却没有引用,这些操作均无意义。

论坛徽章:
0
17 [报告]
发表于 2011-01-28 16:43 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP