我有一個大型的音樂目錄,名爲op
。我已經能夠建立一個命令,它將從op
文件中隨機選取一首歌曲,並使用來自date命令的納秒輸出的一些創意數學。它從命令行工作正常:無法理解爲什麼這會導致錯誤
sed -n $((10#$(date +%N)%$(wc -l /shared/southpark/music/op|cut -d ' ' -f 1)))p /shared/southpark/music/op
我想包括這個命令在一個c程序中,並閱讀與popen行。
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[])
{
char command[201];
char buf[501];
FILE *fp;
strcpy(command, "sed -n $((10#$(date +%N)%$(wc -l /shared/southpark/music/op|cut -d ' ' -f 1)))p /shared/southpark/music/op");
if((fp = popen(command, "r")) == NULL)
{
fprintf(stderr, "music_player: popen failed\n");
return(1);
}
if(fgets(buf, sizeof(buf), fp) == NULL)
{
fprintf(stderr, "music_player: fgets failed\n");
return(1);
}
printf("%s\n", buf);
pclose(fp);
return(0);
}
但是當我運行它,我得到以下錯誤:
sh: 1: arithmetic expression: expecting EOF: "10#271445839%2278"
music_player: fgets failed
我怎樣才能做到這一點?我不理解錯誤消息。
認爲這可能是一個重複的http://stackoverflow.com/questions/15882799/fgets-returning-error-for-file-returned-by-popen – Cyclonecode
你知道了'$ RANDOM'變量,還是'sort -R'命令? – o11c
等等,爲什麼你在寫C時調用shell? – o11c