小编mat*_*dav的帖子

构建一个C shell.execvp返回'No such file'错误.使用malloc即时创建argv数组

我正在构建一个shell,并且在系统调用'execvp'时遇到了一些问题.我在这个主题上看到了一些其他的问题,但它们含糊不清,似乎没有完全解决(谁问过这些问题并没有提供太多信息而且得不到好的答案).

显然我有自己的命令行,我正在读取stdin的用户输入

mysh some/path $ ps -a 
Run Code Online (Sandbox Code Playgroud)

我正在构建一个args数组作为char**并且数组本身可以工作(我认为),因为当我打印出我的函数中的值时,它显示

args[0] = 'ps'
args[1] = '-a'
args[2] = '(null)'
Run Code Online (Sandbox Code Playgroud)

所以,我在我的进程中调用fork和execvp(cmnd,args),其中cmnd是"ps",args如上所述,perror等.

我明白了

'Error: no such file or directory.'  
Run Code Online (Sandbox Code Playgroud)

我需要输入$ PATH变量吗?我还在做别的什么吗?

这是我生成args数组的代码:

char ** get_args(char * cmnd) {
int index = 0;
char **args = (char **)emalloc(sizeof(char *));
char * copy = (char *) emalloc(sizeof(char)*(strlen(cmnd)));
strncpy(copy,cmnd,strlen(cmnd));
char * tok = strtok(copy," ");
while(tok != NULL) {
    args[index] = (char *) emalloc(sizeof(char)*(strlen(tok)+1));
    strncpy(args[index],tok,strlen(tok)+1);
    index++;
    tok = strtok(NULL," ");
    args = (char**) erealloc(args,sizeof(char*)*(index+1));
}
args[index] = …
Run Code Online (Sandbox Code Playgroud)

c malloc shell process execvp

5
推荐指数
1
解决办法
1685
查看次数

bash变量路径名中的空格

啊.我讨厌bash转义序列.这样做的正确方法是什么?

$ export SUBLPKG=~/"Library/Application Support/Sublime Text 2/Packages"
$ cd $SUBLPKG
-bash: cd: /Users/$ME/Library/Application: No such file or directory


$ export SUBLPKG=~/"Library/Application\ Support/Sublime\ Text\ 2/Packages"
$echo $SUBLPKG
/Users/$ME/Library/Application\ Support/Sublime\ Text\ 2/Packages
$ cd $SUBLPKG
-bash: cd: /Users/$ME/Library/Application\: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我想打破所有的事情.

gaaaaaahhhhhhhhhhhhhhhhhh.

variables bash escaping sequence

2
推荐指数
1
解决办法
2030
查看次数

使用NSTimer,调用两个具有相同名称,不同参数的函数,都使用scheduledTimerWithTimeInterval

我正在尝试使用AVAudioPlayer作为助手编写自己的淡入淡出和淡出.

我的问题是:我有两个具有相同名称的方法定义,但一个采用int而另一个不采用参数.有没有办法让我告诉NSTimer哪一个打电话?无法理解文档:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nstimer_Class/Reference/NSTimer.html

-(void) stopWithFadeOut 
{
if (_player.volume > 0.1) {
    [self adjustVolume:-.1];
    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(stopWithFadeOut) userInfo:NULL repeats:NO];
}
else {
    [self stop];
}
}
Run Code Online (Sandbox Code Playgroud)

-(void) stopWithFadeOut:(NSString *)speed 
{
int incr = [speed intValue];
if (_player.volume > 0.1) {
    [self adjustVolume:-incr];
    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(stopWithFadeOut) userInfo:NULL repeats:NO];
}
else {
    [self stop];
}
}
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c avaudioplayer ios

0
推荐指数
1
解决办法
1047
查看次数

标签 统计

avaudioplayer ×1

bash ×1

c ×1

cocoa ×1

escaping ×1

execvp ×1

ios ×1

malloc ×1

objective-c ×1

process ×1

sequence ×1

shell ×1

variables ×1