Linux 学习笔记

1.入门

开发系统引导

头文件 : 可以使用-I标准来包含保存在子目录或非标准位置的头文件
例如 $ gcc -I /usr/openwin/include fred.c
用grep命令来搜索包含某些特定定义和函数原型头文件是很方便的

库文件: 库是 一组事先编译好的函数集
man 命令可以来访问在线的手册页,可以使用 info获取更多信息。

2.shell程序设计

可以使用<和> 对输入输出进行重定向,使用|在同时执行的程序之间实现数据的管道传递,使用$(…)获取子进程的输出。

管道和重定向

例 ls -1>lsoutput.txt
文件描述符0代表一个程序的标准输入,文件描述符1代表标准输出,文件描述符2代表标准错误输出
可以使用>>操作符将输出内容附加到一个文件中。
例如$ ps >> lsoutput.txt

3.文件操作

write 系统调用
系统调用write的作用是把缓冲区buf的前n bytes个字节写入与文件描述符fildes关联的文件中

#include<unistd.h>
size_t write(int fildes,const void *buf, size_t nbytes

read系统调用
系统调用read的作用是:从与文件描述符fildes相关联的文件里读入 n bytes个字节的数据,并把他们放入数据区buf中。

#include<unistd.h>
size_t read(int fildes,void *buf,size_t nbytes);

open系统调用
为了创建一个新的文件描述符,你需要使用系统调用open

#include<fcnt1.h>
#include<sys/types.h>
#include<sys/stat.h>

int open(const char *path,int  oflags);
int open(const char *path,int oflags,mode_t mode);
模式
O_RDONLY 以只读方式打开
O_WRONLY 以只写方式打开
O_RDWR 以读写方式打开

open 调用还可以在oflags参数中包括下列可选模式组合
1.O_APPEND:把写入数据追加在文件的末尾
2.O_TRUNC:把文件的长度设置为零,丢弃已有内容。
3.O_CREAT:如果需要,就按参数mode中给出的访问模式创建文件
4.O_EXCL:与O_CREAT一起使用,确保调用者创建出文件。

访问权限的初始值

当你使用带有O_CREAT标志的open调用来创建文件时,你必须使用有3个参数格式的open调用

  1. S_IRUSR:读权限,文件属主
  2. S_IWUSR:写权限,文件属主
  3. S_IXUSR:执行权限,文件属主
  4. S_IRGRP:读权限,文件所属组
  5. S_IWGRP:写权限,文件所属组
  6. S_IXGRP:执行权限,文件所属组
  7. S_IROTH:读权限,其他用户
  8. S_IWOTH:写权限,其他用户
  9. S_IXOTH:执行权限,其他用户
open  ("myfile",O_CREAT,S_IRUSR|S_IXOTH);

1.umask
umask是一个系统变量,它的作用是:当文件被创建时,为文件访问权限设定一个掩码 。执行umask命令可以修改这个变量的值。
2.close系统调用
使用close调用终止文件描述符fildes与其对应文件之间的关联。文件描述符被释放并能够重新使用。close调用成功时返回0,出错时返回-1.

#include<unistd.h>
int close(int fildes);

3.ioctl系统调用
ioctl提供了一个用于控制设备及其描述符行为和配置底层服务的接口。终端,文件描述符,套接字甚至磁带机都可以有为他们定义的ioctl。

#include<unistd.h>
int ioctl(int fildes, int cmd,...);

其他与 文件管理有关的系统调用

1,lseek系统调用
lseek系统调用对文件描述符fildes的读写指针 进行设置。可以用它来设置文件的下一个读写位置。读写指针既可以被设置为文件中的某个绝对位置,也可以设置为相对于当前位置或文件尾的某个相对位置。

#include<unistd.h>
#include<sys/types.h>

off_t lseek(int fildes,off_t offsrt,int whence);

offset 参数用来指定位置,而whence参数定义该偏移植的用法。whence可以取下列值之一。
SEEK_SET:offset是一个绝对位置。
SEEK_CUR:offset是相对于当前位置的一个相对位置。
SEEK_END:offset是相对于文件尾的一个相对位置。
lseek返回从文件头到文件指针被设置处的字节偏移,失败时返回一。
参数offset的类型off_t是一个与具体实现有关的整数类型,它定义在头文件sys/type.h中
2.fstat,stat和lstat系统调用
fstat系统调用返回与打开的文件描述符相关的文件的状态信息,该信息将会写道一个buf结构,buf中的地址以参数形式传递给fstat.

#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>

int fstat(int fildes,struct stat *buf);
int stat(const char *path,struct stat *buf);
int lstat(const char *path,struct stat *buf)

当文件是一个符号链接时,lstat返回的是该符号链接本身的信息,而sata返回的是该链接指向文件的信息。
3.dup和dup2系统调用
dup系统调用提供了一种复制文件描述符的方法,使我们能够通过两个或者多个不同的描述符来访问同一个文件。这可以用于在文件的不同的位置对数据进行读写。dup系统调用复制文件描述符fildes,返回一个新描述符。dup2系统调用则是通过明确指定目标描述符来把一个文件描述符复制为另外一个。

#include<unistd.h>
int dup(int fildes);
int dup2(int fildes,int fildes2);

3.5 标准I/O库

1.fopen函数
fopen 函数类似于底层的open系统调用。它主要用于文件和终端的输入输出。如果你需要对设备进行明确的控制,那最好使用底层系统调用,这样可以避免用函数库带来一些潜在问题,如输入/输出缓冲。

#include<stdio.h>
FILE *fopen (const char *filename,const char *mode);

fopen打开由filename参数指定的文件,并把它与一个文件流关联起来,mode参数指定文件的打开方式。
fopen在成功时返回一个非空的FILE*指针,失败时返回NULL值。
2.fread函数
fread库函数用于从一个文件流里读取数据。数据从文件流stream 读到由ptr指向的数据缓冲区里。fread和fwrite都是对数据记录进行操作,size参数指定每个数据记录的长度,计数器nitems给出要传输的记录个数。它的返回值是成功读到数据缓冲区里的记录个数(而不是字节数)。当达到文件尾时,它的返回值可能会小于nitems,甚至可以是零。

#include<stdio.h>
size_t fread(void *ptr,size_t size,size_t  nitems,FILE *stream);

3.fwrite函数
从指定的数据缓冲区里取出数据记录,并把它们写道输出流中。

nclude<stdio.h>
size_t fwrite(const void *ptr,size_t size ,size_t nitems, FILE *stream);

4.fclose函数
fclose库函数关闭指定的文件流,使所有尚未写出的数据都写出。因为stdio库会对数据进行缓冲,所以使用fclose是很重要的。如果程序需要确保数据已经全部写出,就应该调用fclose函数。

#include<stdio.h>
int fclose(FILE *stream);

5.fflush函数
fflush库函数作用是把文件流里的所有未写出数据立刻写出。

#include<stdio.h>
int fflush(FILE *stream);

6.fseek函数
fseek函数是与lseek系统调用对应的文件流函数。它在文件流里为下一次读写操作指定位置。

#include<stdio.h>
int fseek(FILE *stream ,long int offset,int whence);

7.fgetc,getc和getchar函数
fgetc函数从文件流里取出下一个字节并把它作为一个字符返回。

#include<stdio.h>
int fgetc (FILE *stream);
int getc (FILE *stream);
int  getchar();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值