5.Linux应用编程
5.1文件I/O编程
在Linux编程中,读写文件有2种方法:标准C、Linux API。
5.1.1标准C
使用stdio.h中的函数:fopen、fclose、fwrite、fread。
在windows下编程:
#include<stdio.h>
#include <stdlib.h>
int save()
{
const char* filename = "aaa.txt";
FILE* fp = fopen(filename, "wb");
if (fp == NULL)
{
printf("failed to open file!\n");
return -1;
}
int buf[4] = { 0xA001,0xB002,0xC003,0xD004 };//0xFFFF时4个字节,因此可以用int表示
fwrite(buf, sizeof(int), 4, fp);
fclose(fp);
return 0;
}
int load()
{
const char* filename = "aaa.txt";
FILE* fp = fopen(filename, "rb");
if (fp == NULL)
{
printf("failed to open file!\n");
return -1;
}
int buf[4];
fread(buf, 4, 4, fp);
//10进制转换为16进制
for (int i = 0; i < 4; ++i)
{
printf("10进制:%d\n", buf[i]);
//转换成16进制,存放在字符串中
char buffer[33];
itoa(buf[i], buffer, 16);
//字母大小写切换
for (int a = 0; a < 33; ++a)
if (buffer[a] >= 'a'&& buffer[a] <= 'z')
buffer[a] = buffer[a] - 32;
//16进制+0x
char temp[33];
sprintf(temp, "0x%s", buffer);
printf("16进制: %s\n", temp);
}
fclose(fp);
return 0;
}
int main()
{
save();
load();
getchar();
return 0;
}
在Linux下编译:
错误:‘itoa’在此作用域中尚未声明
方法:将itoa换成sprintf。
#include<stdio.h>
#include <stdlib.h>
int save()
{
const char* filename="aaa.txt";
FILE* fp=fopen(filename,"wb");
if(fp==NULL)
{
printf("failed to open file!\n");
return -1;
}
int buf[4]={0xA001,0xB002,0xC003,0xD004};//0xFFFF时4个字节,因此可以用int表示
fwrite(buf,sizeof(int),4,fp);
fclose(fp);
return 0;
}
int load()
{
const char* filename="aaa.txt";
FILE* fp=fopen(filename,"rb");
if(fp==NULL)
{
printf("failed to open file!\n");
return -1;
}
int buf[4];
fread(buf,4,4,fp);
//10进制转换为16进制
for(int i = 0;i < 4;++i)
{
printf("10进制:%d\n",buf[i]);
//转换成16进制,存放在字符串中
char buffer [33];
sprintf(buffer,"%04X",buf[i]);
//16进制+0x
char temp[33];
sprintf(temp,"0x%s",buffer);
printf ("16进制: %s\n",temp);
}
fclose(fp);
return 0;
}
int main()
{
save();
load();
getchar();
return 0;
}
Windows平台和linux平台使用标准C或C++还是有些不同,具体可参考:https://blog.csdn.net/m_star_jy_sy/article/details/8482202。
对于文本文件,在windows平台下换行符:\r\n;在linux平台下换行符:\n。
在Linux下使用标准C的优点:可以支持多平台;缺点:Linux系统下设备文件只用Linux API操作。
5.1.2 Linux API
#include<stdio.h>