【发布时间】:2015-12-24 19:34:47
【问题描述】:
为什么我需要按两次回车才能更改当前目录?我注意到,如果我在循环中更改 printf 语句的位置,行为就会改变。我不明白为什么会这样。
下面为您工作的代码。它在 Ubuntu 系统上编译。它的工作量很小。大部分是来自手册页的使用。
#define _GNU_SOURCE // http://man7.org/linux/man-pages/man3/getline.3.html
#include <stdio.h>
#include <unistd.h> // http://man7.org/linux/man-pages/man3/getcwd.3.html
int main() {
char *line = NULL;
size_t linecap = 0;
ssize_t linelen;
while ((linelen = getline(&line, &linecap, stdin)) > 0) {
char * buf = NULL;
size_t size = 1000;
char * s = getcwd(buf, size);
printf("%s# ", s);
*(line+linelen-1) = '\0';
chdir(&line[3]);
}
return 0;
}
我没有得到程序的输出,如下所示(首先,我需要按回车键一次才能获得提示 - 没关系,适用于本示例)。
/path/to/dir# cd ..
/path/to/dir#
/path/to#
【问题讨论】:
-
什么是“东西”?变量
s从未使用过? -
什么是
getline?这是非标准的 -
我编辑了错字。例如,可能是对 chdir(2) 的系统调用。
-
代码没有意义,请附上
something,minimal reproducible example是什么 -
我在代码中添加了一条注释来说明 getline(3) 是什么。我将很快更改代码以使用 chdir(2) 而不是“某事”...
标签: c loops printf posix getline