我有一个简单的程序:
#include <stdio.h>
#define INT32_MIN (-0x80000000)
int main(void)
{
long long bal = 0;
if(bal < INT32_MIN )
{
printf("Failed!!!");
}
else
{
printf("Success!!!");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
条件if(bal < INT32_MIN )总是如此.这怎么可能?
如果我将宏更改为:
#define INT32_MIN (-2147483648L)
Run Code Online (Sandbox Code Playgroud)
有谁可以指出这个问题?
源文件
rsetti::fastidio { /tmp }-> cat foo.c
#include <stdio.h>
void ACFunction() {
printf("ACFunction()\n");
AGoFunction();
}
Run Code Online (Sandbox Code Playgroud)
编译共享库
rsetti::fastidio { /tmp }-> clang -shared -o libfoo.so foo.c
foo.c:4:3: warning: implicit declaration of function 'AGoFunction' is invalid in C99 [-Wimplicit-function-declaration]
AGoFunction();
^
1 warning generated.
Undefined symbols for architecture x86_64:
"_AGoFunction", referenced from:
_ACFunction in foo-lFDQ4g.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
rsetti::fastidio { /tmp }->
Run Code Online (Sandbox Code Playgroud)
linux + …
在bash脚本中我处理不同的信号如下:
#!/bin/bash
sighdl ()
{
echo "signal caught"
#do something
exit 0
}
trap sighdl SIGKILL SIGINT SIGTERM
Run Code Online (Sandbox Code Playgroud)
以上代码处理信号适合以下活动:
kill pidpkill scriptname因为kill -9 pid它没有打电话sighdl.根据我的理解(如果我没有错)kill -9发送SIGKILL信号.
任何的想法?
我尝试使用sed命令从文件中删除特定行,但它似乎在我的系统中无法正常工作(CentOS 版本 6.3(最终版))。
我的 file1.txt 包含以下数据
line1
line2
line3
line4
line5
Run Code Online (Sandbox Code Playgroud)
现在我尝试下面的命令从文件中删除第三行。
$ sed '3d' file1.txt
Run Code Online (Sandbox Code Playgroud)
上述命令的输出是
line1
line2
line4
line5
Run Code Online (Sandbox Code Playgroud)
但当我检查原始文件时,似乎没有删除任何内容。第三行在那里。
那么有人知道为什么sed不工作吗?
我继承了一些经过严格混淆和写得不好的PIC代码来修改.这里有两个宏:
#define TopByteInt(v) (*(((unsigned char *)(&v)+1)))
#define BottomByteInt(v) (*((unsigned char *)(&v)))
Run Code Online (Sandbox Code Playgroud)
有人能够解释他们到底做了什么以及这意味着什么?
谢谢 :)
有了 bash,创建了通过索引访问数组元素的简单脚本。如下所示
#! /bin/bash
OK_INDEX=0
CANCEL_INDEX=1
ERROR_INDEX=2
CONFIRM_INDEX=3
SAVE_INDEX=4
EXIT_INDEX=5
declare -a messageList=("ok"
"cancel"
"error"
"confirm"
"save"
"exit")
printf "%s \n" ${messageList[$CANCEL_INDEX]}
Run Code Online (Sandbox Code Playgroud)
从上面的脚本中,我需要声明适当的索引变量来从数组列表中检索有效消息,但对我来说声明每个变量并为它们提供索引可能不太方便。如果变量像 C 中的ENUM数据类型一样自动获取值,那就太好了
在C中,可以通过类似的方式
enum index { OK_INDEX, CANCEL_INDEX, ERROR_INDEX,CONFIRM_INDEX,SAVE_INDEX,EXIT_INDEX};
Run Code Online (Sandbox Code Playgroud)
ENUMbash有没有其他选择?
我发现了很多,但没有成功,然后尝试了一些技巧来实现这一点,如下所示
ENUM=(OK_INDEX CANCEL_INDEX ERROR_INDEX CONFIRM_INDEX SAVE_INDEX EXIT_INDEX)
maxArg=${#ENUM[@]}
for ((i=0; i < $maxArg; i++)); do
name=${ENUM[i]}
declare -r ${name}=$i
done
Run Code Online (Sandbox Code Playgroud)
因此,从上面的代码片段中我成功创建了常量,但看起来很长意味着只需声明变量我需要编写 5-10 行代码,这是不公平的。
那么有人有另一种解决方案吗?
在CentOS 6.3版(最终版)系统上工作.并尝试使用sshpass实用程序ssh另一台机器
sshpass -p 'password' ssh user@host
Run Code Online (Sandbox Code Playgroud)
但它给我的错误就像
sshpass: Failed to run command: No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以从错误我认为sshpass可能不是安装所以尝试安装它yum install sshpass并得到以下日志
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: mirror.leapswitch.com
* epel: epel.mirror.net.in
* extras: mirror.leapswitch.com
* nux-libreoffice.org-rpms: mirror.li.nux.ro
* updates: mirror.leapswitch.com
Setting up Install Process
Package sshpass-1.05-1.el6.i686 already installed and latest version
Nothing to do
Run Code Online (Sandbox Code Playgroud)
从上面看似sshpass已经安装了.所以它为什么不工作?
我编写了简单的脚本来验证IP地址和Netmask,如下所示
#!/bin/bash
validFormatIP()
{
echo $1 | grep -w -E -o '^(25[0-4]|2[0-4][0-9]|1[0-9][0-9]|[1]?[1-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' > /dev/null
if [ $? -eq 0 ]
then
echo "Valid ipaddress"
else
echo "Inalid ipaddress"
fi
}
validNetMask()
{
echo $1 | grep -w -E -o '^(254|252|248|240|224|192|128)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)' > /dev/null
if [ $? -eq 0 ]
then
echo "Valid netmask"
else
echo "Invalid netmask"
fi
}
setIpAddress()
{
ip_address=`echo $1 | awk -F= '{print $2}'`
validFormatIP $ip_address
}
setNetMask()
{
ip_address=`echo $1 | awk -F= '{print $2}'`
validNetMask …Run Code Online (Sandbox Code Playgroud) 有下面的示例脚本 sample.sh
#!/bin/bash
if ps aux | grep -o "sample.sh" >/dev/null
then
echo "Already script running"
exit 0
fi
echo "start script"
while true
do
echo "script running"
sleep 5
done
Run Code Online (Sandbox Code Playgroud)
在上面的脚本中,我想检查以前运行的脚本是否运行然后再运行它.
问题是检查条件总是变为真(因为检查条件需要运行脚本)并且它总是显示"Already script running"消息.
知道怎么解决吗?
我是Python的新手,这是我第一个替换word的脚本.
我的文件test.c包含以下两行
printf("\nReboot not supported. Exiting instead.\n");
fprintf(stderr, "FATAL: operation not supported!\n");
Run Code Online (Sandbox Code Playgroud)
现在我要替换printf并fprintf通过//printf和//fprintf分别.
这是我尝试过的
infile = open('path\to\input\test.c')
outfile = open('path\to\output\test.c', 'w')
replacements = {'printf':'//printf', 'fprintf':'//fprintf'}
for line in infile:
for src, target in replacements.iteritems():
line = line.replace(src, target)
outfile.write(line)
infile.close()
outfile.close()
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个
fprintf到//f//printf这是错误的.
对于解决方案已经看了这个答案,但不能适应我的脚本.
任何人都知道如何解决它?