linux中oc命令详解 linux o命令
OC中extern、static、const和宏定义
基础知识:(参考Henry725的博客)
创新互联公司坚信:善待客户,将会成为终身客户。我们能坚持多年,是因为我们一直可值得信赖。我们从不忽悠初访客户,我们用心做好本职工作,不忘初心,方得始终。十多年网站建设经验创新互联公司是成都老牌网站营销服务商,为您提供成都网站设计、成都网站建设、网站设计、H5建站、网站制作、品牌网站建设、成都微信小程序服务,给众多知名企业提供过好品质的建站服务。
extern用于变量的声明,告诉编译器:已经存在一个全局变量,但是不在当前的编译单元内,需要连接的时候在其他编译单元中寻找。
修改变量作用域为当前编译单元,变量生命周期不变;
避免重复定义全局变量
2.2. 修饰局部变量 -
修改变量的生命周期为整个工程周期,变量作用域不变
const修饰右边的变量,用来限制变量为只读属性。
在程序的预编译阶段进行替换处理。
区别:
1.define宏是在预处理阶段展开。
const常量是编译运行阶段使用。
2.define不做检查,不会报编译错误,只是替换。const会编译检查,会报编译错误
3.define在展开的时候才分配内存,展开几次分配几次内存。const在定义的时候会分配一次内存到静态区,使用时不重复分配
4.define可以定义一些简单的运算函数
声明一个只读的静态变量
在多个文件中经常使用的同一个全局变量。
使用场景:
1、.h文件中声明
2、.m文件中赋值
这里直接访问即可,都不用放到.pch文件中,因为默认权限是internal
public : 最大权限,可以在当前framework和其他framwork中访问;
internal : 默认权限,可以在当前framework中随意访问;
private : 私有权限,只能在当前文件中访问;
一般常量的话,都用extern const 来代替define。
因为一旦定义#define的方式,整个工程将被重新编译,这样带来的时间浪费可想而知
当然了很多情况还是代替不了的,一般定义常量的时候是应该使用这种方式来定义,不过也只是常量宏不被推荐,但是类函数宏用的还是很方便的,
const、#define的优缺点
编译器可以对const进行类型安全检查。而对#define只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。
这种情况还可能出现以下错误
Sending 'const NSString *__strong' to parameter of type 'NSString *' discards qualifiers
原因是需要 NSString* 的地方使用了 const NSString*
.h中 extern const NSString* 替换为 extern NSString* const
.m中 const NSString* 替换为 NSString* const
解释:前者相当于指针本身不可修改,后者表示指针指向的内容不可修改,两者的作用都是使字符串只可读不可写。
oc指令是啥意思航天
OC指令是“Orbital Command”的缩写,它是一种用于控制太空船只的指令。OC指令可以用来控制航天器的航向、速度、加速度和姿态,以及航天器的起降、悬停和轨道调整等。OC指令还可以用来控制航天器的传感器、系统和设备,以及航天器的通信、导航和控制系统。OC指令可以用来控制航天器的运行状态,以及航天器的环境参数,如温度、湿度、压力和放射性能等。OC指令还可以用来控制航天器的燃料消耗、推力和轨道变化等。总之,OC指令是用来控制航天器的一种重要指令,它可以帮助航天器实现其设定的任务。
在linux系统中OC编程如何实现字符串连接
由于Xcode对中文支持良好,所以在开发过程中经常直接使用中文字符串。
不过苹果推荐多语言化,需要为中文字符串添加个NSLocalizedString宏。
#!/usr/bin/python
# -*- coding: utf-8 -*-
'''''
Localization The Objective-C Code
@"..." -- NSLocalizedString(@"...", nil)
Jason Lee 2012-03-01
'''
import os, sys
import re
import codecs
targetPattern = pile('@"[^"]+"')
global newFile, newFilePointer
def isChineseCharacter(ch):
return0x4e00 = ord(ch) = 0x9fa5
def hasChineseCharacter(str):
for char in str:
if isChineseCharacter(char):
returnTrue
returnFalse
def buildNewString(oldStr):
newStrPrefix = 'NSLocalizedString('
newStrSuffix = ', nil)'
newStr = newStrPrefix + oldStr + newStrSuffix
return newStr
def processLine(line):
global newFile, newFilePointer
matchResult = targetPattern.findall(line)
for result in matchResult:
if hasChineseCharacter(result):
#print result, buildNewString(result)
p = pile(result)
line = p.sub(buildNewString(result), line)
newFilePointer.write(line)
def processFile(filename):
#Xcode file is saved with utf-8
global newFile, newFilePointer
newFile = 'Replaced.' + filename
newFilePointer = codecs.open(newFile, 'wb', 'utf-8')
fp = codecs.open(filename, 'rb', 'utf-8')
for line in fp:
processLine(line)
fp.close()
newFilePointer.close()
oldFile = 'Old.' + filename
os.system('mv ' + filename + ' ' + oldFile)
os.system('mv ' + newFile + ' ' + filename)
#os.system('rm -f ' + oldFile)
if __name__ == "__main__":
if len(sys.argv) 1:
output = os.popen('ls ' + sys.argv[1]).read()
filelist = re.split('\n', output)
filelist = filelist[:-1]
#print filelist
print'Localizing...'
for file in filelist:
if os.path.exists(file):
try:
#print 'Processing File :', file
processFile(file)
except Exception as e:
print e
print'Localization Done.'
之后需要做的事情参考:
代码没用经过严格验证,请慎用。起码,没有检查该字符串是否已经加了NSLocalizedString宏。
新手的OpenShift oc命令
有一天,我发现这篇关于 bash 帖子。如果您是专业用户,您可能已经知道所有这些技巧,但如果您是新手或不是这样的专业用户,那么该帖子很可能是您的一天。
我认为为 oc 命令创建类似的帖子会很有用。 oc 命令是dope,每个人都应该知道。它设计精良,一致,灵活,正如您将看到的,有许多值得尝试的隐藏功能。
如果您是OpenShift专业人士,您可能已经知道我将在这里揭示的大部分内容; 否则,如果您刚开始使用OpenShift,或者您不是经验丰富的用户,这将为您节省一些宝贵的时间。
当我不知道发生了什么或者我收到了不友好的错误消息时,我总是使用该标志 --loglevel 。它将日志级别信息写入stderr。根据日志级别,您将获得curl API Rest调用,、API Rest正文答案,甚至更详细的信息。
如果要修补OCP对象,loglevel 9非常方便,因为它显示了您需要应用的补丁(API请求体)。
假设您要更改服务对象的标签,在本例中标签为“app:hello-jorge”。
注意: 在绝望的时刻,你总是可以添加任意数量的9,结果将只有一个9,但你可能会感到宽慰。
是的,你没有看错。您可以替换正在运行oc命令的用户,或者在OCP术语中,您可以 "模拟"(impersonate ) 用户。显然,如果你有足够的权限进行模拟, 那么你只需要使用flag --as 。
例如:
此外,可以进行组模拟,而不是用户模拟:
在许多情况下,它非常方便快捷,例如,检查用户是否可以执行特定操作或检查用户在运行oc时将收到的输出。在搞不清角色和权限时,它也很有用。
oc whoami 命令众所周知,特别是加上flag -t 用于获取当前用户/会话的持有者令牌。但是当你有一个令牌并且你不知道谁是所有者时会发生什么?
您可以做的一件事是使用令牌登录OpenShift,然后执行 oc whoami ...等待一秒钟。 oc whoami 会给你这个信息!只需在命令行中传递令牌作为第3个参数,不需要任何标志。
试试看:
你可以运行一个pod并获得一个shell。有时获取正在运行的pod配置的副本并使用shell对其进行故障排除很有用。这是默认行为。
介绍下 oc debug 选项,您可以以root用户, 或任何其他用户ID身份运行容器,强制它在特定节点中运行各种命令。
您必须针对有效的 dc 运行命令,例如:
OpenShift / k8s对象有时很复杂,有很多字段。很多时候,我最终在OCP文档或其他来源中寻找对象定义示例。在涉及OCP / k8s对象定义时,您可以考虑用 oc explain 作为可信来源。
oc explain 为您提供资源及其字段的文档。在声明新的OCP对象时,或者当您无法访问官方OCP文档时,它非常有用。
例如,您可以获取pod文档和pod spec affinity字段描述:
关于oc命令的一个非常酷的事情是它具有格式化输出的内置功能。我们都知道 -o json 或者 -o yaml ,但flag -o 为您提供了许多其他可能性。
在我发现的所有这些输出选项中, go-template 和 jsonpath 是最强大的输出选项:
例如,假设您想要获取特定路由(router)(docker registry router)所公开的服务(service):
或者您想了解路由器DC的部署策略:
如您所见,oc命令非常棒。我鼓励你继续玩它,因为这是OpenShift最酷的事情之一。
Jorge Tudela Gonzalez de Riancho在红帽西班牙工作,担任云顾问,专门研究OpenShift和容器相关技术。
当前文章:linux中oc命令详解 linux o命令
链接URL:http://ybzwz.com/article/dohcdpe.html