linux下既然把所有的设备都看作文件来处理,就要熟练使用linux下文件操作的相关API。
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#define LENGTH 100
int main(int argc,char* argv[])
{
int fd,len;
char str[LENGTH];
char *content="hi!";
char *path="/tmp/test.txt";
if(argc<2){
printf("Usage:Please pass the content as argument!\n");
exit(1);
}
content=argv[1];
fd=open(path,O_CREAT|O_RDWR,S_IRUSR|S_IWUSR);
if(fd<0){
printf("Fail to open or create file!\n");
exit(1);
}
if(write(fd,content,strlen(content))!=strlen(content)){
printf("write error!\n");
exit(1);
}
close(fd);
if((fd=open(path,O_RDWR))<0){
printf("Fail to open file!\n");
exit(1);
}
if((len=read(fd,str,LENGTH))<0){
printf("Read file error!\n");
exit(1);
}
str[len]='\0';
printf("%s\n",str);
close(fd);
return 0;
}
用malloc函数代替数组str,根据要打印的内容长度动态申请内存:
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
//#define LENGTH 100
int main(int argc,char* argv[])
{
int fd,len;
// char str[LENGTH];
char *str;
char *content="hi!";
char *path="/tmp/test.txt";
if(argc<2){
printf("%s\n",content);
printf("Usage:Please pass the content as argument!\n");
exit(1);
}
content=argv[1];
fd=open(path,O_CREAT|O_RDWR,S_IRUSR|S_IWUSR);
if(fd<0){
printf("Fail to open or create file!\n");
exit(1);
}
if(write(fd,content,strlen(content))!=strlen(content)){
printf("write error!\n");
exit(1);
}
close(fd);
if((fd=open(path,O_RDWR))<0){
printf("Fail to open file!\n");
exit(1);
}
str=malloc(strlen(content));
if((len=read(fd,str,strlen(content)))<0){
printf("Read file error!\n");
exit(1);
}
// str[len]='\0';
printf("%s\n",str);
free(str);
close(fd);
return 0;
}