Linuxc笔试面试经典题(1)

1.找错题
试题1:
void test1()
{
char string[10];
char* str1 = “0123456789”;
strcpy( string, str1 );
}

试题2:
void test2()
{
char string[10], str1[10];
int i;
for(i=0; i<10; i++)
{
str1[i] = ‘a’;
}
strcpy( string, str1 );
}

试题3
void test3(char* str1)
{
char string[10];
if( strlen( str1 ) <= 10 )
{
strcpy( string, str1 );
}
}

试题4
void GetMemory( char *p )
{
p = (char *) malloc( 100 );
}
void Test( void )
{
char *str = NULL;
GetMemory( str );
strcpy( str, “hello world” );
printf( “%s\n”, str );
}

试题5

char *GetMemory( void )
{
char p[] = “hello world”;
return p;
}
void Test( void )
{
char *str = NULL;
str = GetMemory();
printf( “%s\n”, str );
}

试题6

void GetMemory( char **p, int num )
{
*p = (char *) malloc( num );
}
void Test( void )
{
char *str = NULL;
GetMemory( &str, 100 );
strcpy( str, “hello” );
printf( “%s\n”, str );
}

试题7

void Test( void )
{
char *str = (char *) malloc( 100 );
strcpy( str, “hello” );
free( str );
… //省略的其它语句
}

试题 8
INT8U GetCPLDData(INT8U slaveaddress, INT8U offset)
{
int ret_val;
int i2c_fd;
INT8U ReadData = 0xff;
struct i2c_rdwr_ioctl_data *data;
data = (struct i2c_rdwr_ioctl_data *)malloc(sizeof(struct i2c_rdwr_ioctl_data));
data->nmsgs = 2;
data->msgs = (struct i2c_msg *)malloc(data->nmsgs * sizeof(struct i2c_msg));
data->msgs[0].buf = (unsigned char *)malloc(sizeof(unsigned char));
data->msgs[1].buf = (unsigned char *)malloc(sizeof(unsigned char));
data->msgs[0].addr = slaveaddress>>1;
data->msgs[0].flags = 0;
data->msgs[0].len = 1;
data->msgs[0].buf[0] = offset;

		data->msgs[1].addr = 0x68>>1;//slave_address;
		data->msgs[1].flags = I2C_M_RD;
		data->msgs[1].len = 0x02;//read_length;
		data->msgs[1].buf[0] = 0;
			
		i2c_fd = open( "/dev/i2c8"/*i2c_dev*/, O_RDWR );
			
		ret_val = ioctl(i2c_fd, I2C_RDWR, (unsigned int)data);
		if(ret_val < 0)
		{
			printf("failed.\n\n");
		}
		/*for(i = 0; i < data->msgs[1].len; i++)
		{
			read_buff[i] = data->msgs[1].buf[i];
		}*/
		ReadData= data->msgs[1].buf[0];
		return ReadData;

}

2.分别给出BOOL, int, float,指针变量 与“零值”比较的 if 语句(假设变量名为var)。
BOOL: If(var)&if(!var)
Int: If(var == 0)
Float: if()
指针: if(var ==NULL)

3.编写一个标准strcpy函数。

4.请说出static,const,volatile关键字尽可能多的作用。

5.请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1。

6.写一下C打开文本读写内容的程序代码;写一下Linux对打开设备读写的程序代码。

7.在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。

8.简单说明一下TCP和UDP的区别。另外,请写个TCP Socket的编码流程,包括服务器端以及客户端。(详细说明Socket API流程)

9.描述一下I2C,SPI,GPIO,以及有没有针对这些写过的Driver或者应用。

10.详细描述下嵌入式Linux启动流程。

11.简述一下Linux 进程间通信的几种方式,并写出每种通信方式的部分核心代码。如果有对其中哪种方式最了解,应用过,可以把之前经验举例说明。

12.Linux 开发中有什么方法调试进程收到段错误(Segment fault)导致进程挂掉的问题?如果之前有经验调试过此类问题,可以举例说明。
1、使用gdb调试

fsk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值