文件I/O操作
POSIX库函数 :(protable operating system interface 可以移植操作系统接口)
open() read() write() lseek() close()
这些函数只能在Linux下使用,程序不可移植,这些函数主要是用来系统调用的,比较低级。
返回值:是一个文件描述符
C标准库函数:
fopen() fread() fwrite() fseek() fprintf() fclose() ftell()
通过上面的open() read() write() lseek() close()等一些低级函数封装过来的
返回值:是一个FILE结构指针
这里用到了I/O数据流的操作。
这里还涉及到缓冲区和非缓冲区的问题,还没研究。
标准C函数库和POSIX函数库的关系:
https://blog.csdn.net/smstong/article/details/51614857
https://blog.csdn.net/dreamtdp/article/details/7560654
一个读写文件的程序
#include <sys/stat.h>
#include <fcntl.h>
#include "tlpi_hdr.h"
struct ADDRESS
{
char name[15];
char unit[15];
char phone[15];
};
int
main(int argc, char *argv[])
{
int n,i;
struct ADDRESS add[50];
if(strcmp(argv[1],"input") == 0)
{
FILE * fp;
printf("please input record num you want to input \n");
scanf("%d",&n);
for(i = 0; i < n; i++)
{
printf("input a name a unit a phonenum\n");
scanf("%s%s%s",add[i].name, add[i].unit, add[i].phone);
}
fp = fopen("./tfile","a");
for(i = 0; i < n; i++)
{
fprintf(fp, "%s%10s%10s \n",add[i].name , add[i].unit , add[i].phone);
}
fclose(fp);
}
if(strcmp(argv[1],"show") == 0)
{
FILE * fp;
int len;
char buffer[100];
fp = fopen("./tfile","r");
printf("show address list \n");
fseek(fp , 0L , SEEK_END);
len = ftell(fp);
rewind(fp);
fread(buffer , 1 , len ,fp);
printf("%s",buffer);
fclose(fp);
}
return 0;
------------------------------------------------------------------------------------------------------------------------
数据结构的使用
结构体在内存中的存储
struct A
{
char a[20];
char b[20];
char c[20];
}; //注意分号结尾
struct A a[10] = {{"aaa","aaa","aaa"},{"bbb","bbb","bbb"},{"ccc","ccc","ccc"}}
sizeof(struct A) 60
sizeof(a) 600
sizeof(a[0]) 60