当需要用到write函数时,应用程序的open函数注意不要以0方式打开,而要以O_RDWR方式打开,否则是进入不了内核的write函数的
测试程序代码如下:
#include
#include //open函数用到
#include //signal函数用到
static char time[8]; //输入输出都是字符格式
static int fd; //打开设备文件的文件句柄
void int_to_char(int t[])
{
time[0]=t[0]/10+'0';
time[1]=t[0]%10+'0';
time[3]=t[1]/10+'0';
time[4]=t[1]%10+'0';
time[6]=t[2]/10+'0';
time[7]=t[2]%10+'0';
}
void sig_handle(void)
{
int t[3];
printf("Input new time below\n");
printf("hour:");scanf("%d",&t[0]);
printf("min:");scanf("%d",&t[1]);
printf("sec:");scanf("%d",&t[2]);
int_to_char(t);
write(fd,time,sizeof(time)); //fd和time设为全局变量是因为这里要用到
}
int main(void)
{
int i;
signal(SIGTSTP,(void *)sig_handle); //捕捉信号,Ctrl+Z是一个SIGTSTP信号
fd=open("/dev/RTC",O_RDWR); //以可读可写方式打开,用0默认方式不可写
if(fd<0){
printf("Open device failed!\n");
exit(1); //异常退出
}
printf("Open device successfully!\n");
while(1){
read(fd,time,sizeof(time));
for(i=0;i<8;i++){
printf("%c",time[i]);
}
printf(" (press Ctrl+Z to reset time)\n");
printf("\n");
}
close(fd);
return 0;
}