一、标准输入输出
Linux里的标准输入输出文件符
标准输入0 从键盘获取
标签输出1 在屏幕显示(shell)
错误输出2 在屏幕显示(shell)
简答的测试代码如下
char readbuff[128];
int n_read = read(0,readbuf,128);//从键盘读取输入
int n_write = write(1,readbuf,strlen(readbuf);//将读取的信息向shell写入
效果
linux提供的write与read函数返回的是写入或读取的字节数
二、小练习-复制文件
8 int main(int i, char **array) //参数:被复制文件 复制的文件
9 {
10
11 int fdSrc;//文件描述符 被复制文件
12 int fdDes;//文件描述符 复制的文件
13
14 char *readBuf = NULL;
15 //判断输入的参数是否正确
16 if(i != 3){
17 printf("pararm error\n");
18 exit(-1);
19 }
20
21
22 fdSrc = open(array[1],O_RDWR);//只读打开
23 //移动光标位置
24 int size = lseek(fdSrc,0,SEEK_END);//文件描述符,SEEK——END光标位置指向文件尾后再增加0个位移量
25 //当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节
26 lseek(fdSrc,0,SEEK_SET);//光标指向文件头
27
28 readBuf = (char *)malloc(size * sizeof(char) + 8);//申请存储空间
29
30 int n_read = read(fdSrc,readBuf,size);
// int nread = fread(ret,1,1024,fp);//读到ret,每次读1个字节,读1024次,从fp里面读
31
32 fdDes = open(array[2],O_RDWR|O_CREAT,0600);//打开复制文件
33
34 int n_write = write(fdDes,readBuf,strlen(readBuf));//向复制文件写入数据
35
36
37
38
39 free(readBuf);
40 close(fdSrc);//关闭文件
41 close(fdDes);//关闭文件
42
43 return 0;
44 }
三、小练习-修改配置文件
``8 int main(int i, char **array) // 参数:配置文件名
9 {
10 int fdSrc ; //配置文件描述符
11
12 char *readBuf = NULL;
13 //参数个数
14 if(i != 2){
15 printf(“pararm error\n”);
16 exit(-1);
17 }
18
19 //打开配置文件
20 fdSrc = open(array[1],O_RDWR);
21
22 //确定文件的大小-用光标移动来确定,这是方式之一
23 int size = lseek(fdSrc,0,SEEK_END);
24 lseek(fdSrc,0,SEEK_SET);
25
26
27 readBuf = (char *)malloc(size * sizeof(char) + 8);//分配内存
28 int n_read = read(fdSrc,readBuf,size);//读取配置文件里的内容
29
30
31
32
33 char *p = strstr(readBuf,"lisi = ");//找到想修改的地方的头
34
35 if(p == NULL){
36 printf(“not found\n”);
37 exit(-1);
38 }
39
40
41 p = p + strlen("lisi = ");//移动指针
42 *p = ‘9’;
43
44 lseek(fdSrc,0,SEEK_SET);//光标移动到文件头
45
46 int n_write = write(fdSrc,readBuf,strlen(readBuf));//将修改好的内容重新写入配置文件
47
48 close(fdSrc);//关闭文件
49
50 return 0;
51 }
四、写入结构体
不过打开写入int类型时,打开文件时,看到时乱码的,但计算机认为不是乱码
9 struct Text
10 {
11
12 int a;
13 char c;
14
15 };
16
17
18 int main()
19 {
20 int fd;
21 int n_read;
22 int n_write;
23 struct Text data[2] = {{100,'a'},{100,'b'}};// 写入文件里面的结构体
24 struct Text data2[2];//把文件里的结构体内容赋到data2,然后在shell显示
25 fd = open("./file1",O_RDWR);
26 if (fd < 0){
27 printf("open file1 failed!\n");
28 printf("%d\r\n",fd);
29
30 }
31
32 n_write = write(fd,&data,sizeof(struct Text)*2);//write返回写入多少个字节
33 lseek(fd,0,SEEK_SET);
34
35 n_read = read(fd,&data2,sizeof(struct Text)*2);//read返回读到多少个字节
36 printf("%d,%d\r\n",n_write,n_read);
37 //把读到的内容存到data2中
38 //printf("read %d,%c\n",data2[0].a,data2[0].c);
39 //printf("read %d,%c\n",data2[1].a,data2[1].c);
40 close(fd);
41
42 return 0;
43 }