#粤嵌星计划#
strlen 和 sizeof 的区别:
sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符/0。返回的长度大小不包括/0。
strlen 和 sizeof 的区别:
sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符/0。返回的长度大小不包括/0。
#粤嵌星计划,粤嵌我来了#粤嵌星计划
今日知识分享:
shell脚本的变量
1, 命名方式
Shell的变量命名方式与C语言类似:
只能由数字,字母,下划线组成,不能是数字开头
2, shell脚本变量声明
shell脚本的变量不需要声明数据类型,数据类型默认都是字符串类型
C语言: int i; / char ch; / float f;
Shell : str
3,shell变量的赋值时,等号两边不能有空格
C语言: int age = 20; // char *p = “helloworld”;
Shell : str=hello
4,变量的引用,需要在变量名前面加上 $
Shell:
Str=hello
echo $Str
5,变量的种类
C语言: 局部变量,静态变量,全局变量
Shell :
1) 普通用户自定义的变量 ==》4中的Str
2) 系统环境变量 ==》例如 PATH
==》可以通过env查看系统环境变量
修改环境变量 PATH ==》 把一个路径添加进去 /home/gec
export PATH=$PATH:/home/gec 临时修改(关闭终端,这修改就没有用)
==》想要永久修改,就把这个命令写入终端启动脚本 ~/.bashrc 最后一行
3) 命令行变量 $#$* 类似于C语言的argc与argv
C语言: int main(int argc, char *argv[]);
./hello aaabbb
argc = 3 , argv[1] = aaa; argv[2] = bbb;
shell :
./hello.sh aaaa bbbb
$# :命令行参数个数 2 个 (不包含 ./hello.sh)
$*: 代表所有参数 aaaa bbbb
$n : 第n个参数, $1 代表第一个参数aaaa , $2代表 bbbb
$? : 最后一个shell命令的返回值 shell命令执行:成功返回0,失败:非0
$$ : 代表当前进程的PID
今日知识分享:
shell脚本的变量
1, 命名方式
Shell的变量命名方式与C语言类似:
只能由数字,字母,下划线组成,不能是数字开头
2, shell脚本变量声明
shell脚本的变量不需要声明数据类型,数据类型默认都是字符串类型
C语言: int i; / char ch; / float f;
Shell : str
3,shell变量的赋值时,等号两边不能有空格
C语言: int age = 20; // char *p = “helloworld”;
Shell : str=hello
4,变量的引用,需要在变量名前面加上 $
Shell:
Str=hello
echo $Str
5,变量的种类
C语言: 局部变量,静态变量,全局变量
Shell :
1) 普通用户自定义的变量 ==》4中的Str
2) 系统环境变量 ==》例如 PATH
==》可以通过env查看系统环境变量
修改环境变量 PATH ==》 把一个路径添加进去 /home/gec
export PATH=$PATH:/home/gec 临时修改(关闭终端,这修改就没有用)
==》想要永久修改,就把这个命令写入终端启动脚本 ~/.bashrc 最后一行
3) 命令行变量 $#$* 类似于C语言的argc与argv
C语言: int main(int argc, char *argv[]);
./hello aaabbb
argc = 3 , argv[1] = aaa; argv[2] = bbb;
shell :
./hello.sh aaaa bbbb
$# :命令行参数个数 2 个 (不包含 ./hello.sh)
$*: 代表所有参数 aaaa bbbb
$n : 第n个参数, $1 代表第一个参数aaaa , $2代表 bbbb
$? : 最后一个shell命令的返回值 shell命令执行:成功返回0,失败:非0
$$ : 代表当前进程的PID
#粵嵌星计划
粤嵌星计划,粤嵌我来了
管道通信API
int pipe(int pipefd[2]);
功能:调用该函数,成功时在linux内部诞生一个无名管道主体,(无法在软件层看到),
并且返回管道的读写两个端口的文件描述符,放进pipefd这个参数中。
返回值:成功返回0,失败返回-1.
特点:①没有名字;②只能在有血缘关系的进程之中使用(靠继承来共享文件描述符);
③半双工通信;④写入数据没有原子性;⑤具备阻塞特性;⑥不能使用lseek函数定位。
int mkfifo(const char* pathname,mode_t mode);
功能:创建一个有名管道,一定不能在共享文件夹里创建。
参数:第一个是要创建有名管道的路径,mode是文件权限。
返回值:成功返回0,失败返回-1.
特点:①有名字的一个文件;②任意的进程都能使用;③全双工的通信;④写入具备原子性;
⑤具备阻塞特性;⑥不能lseek函数定位;⑦跟普通文件的操作一样(open,read,write..)
粤嵌星计划,粤嵌我来了
管道通信API
int pipe(int pipefd[2]);
功能:调用该函数,成功时在linux内部诞生一个无名管道主体,(无法在软件层看到),
并且返回管道的读写两个端口的文件描述符,放进pipefd这个参数中。
返回值:成功返回0,失败返回-1.
特点:①没有名字;②只能在有血缘关系的进程之中使用(靠继承来共享文件描述符);
③半双工通信;④写入数据没有原子性;⑤具备阻塞特性;⑥不能使用lseek函数定位。
int mkfifo(const char* pathname,mode_t mode);
功能:创建一个有名管道,一定不能在共享文件夹里创建。
参数:第一个是要创建有名管道的路径,mode是文件权限。
返回值:成功返回0,失败返回-1.
特点:①有名字的一个文件;②任意的进程都能使用;③全双工的通信;④写入具备原子性;
⑤具备阻塞特性;⑥不能lseek函数定位;⑦跟普通文件的操作一样(open,read,write..)
✋热门推荐