在 /bin 中搜索带有 stat 的文件
searching for files with stat in /bin
嗨,我正在尝试编写一个代码来搜索 /bin 目录中的文件并确定该文件是否确实存在,我的代码总是出错,我真的不明白为什么你能给我一个线索?
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#define MAX 4096
int main()
{
while(1)
{
char input[MAX];
struct stat buf;
const char *space=" ";
fgets(input, MAX, stdin);
char *token;
token = strtok(input, space);
if (!strncmp(token,"/bin/",5))
{
if (stat(token,&buf)==-1)
{
perror(token);
printf( "ERROR\n");
}
else
{
printf("FILE EXISTS\n");
}
}
}
return 0;
}
这是输入及其内容 returns:
/bin/ls
: No such file or directory
ERROR
免责声明:我刚刚更正了问题并添加了更多内容,以便你们更好地理解问题,不要对我尖叫。
来自fgets manual:
If a newline is read, it is stored into the buffer.
也就是说,代码当前尝试检查 "/bin/ls\n"
而不是 "/bin/ls"
。
通过首先去除尾随的换行符来修复。一种方式:
const char *delim = " \n";
fgets(input, MAX, stdin);
const char *token = strtok(input, delim);
嗨,我正在尝试编写一个代码来搜索 /bin 目录中的文件并确定该文件是否确实存在,我的代码总是出错,我真的不明白为什么你能给我一个线索?
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#define MAX 4096
int main()
{
while(1)
{
char input[MAX];
struct stat buf;
const char *space=" ";
fgets(input, MAX, stdin);
char *token;
token = strtok(input, space);
if (!strncmp(token,"/bin/",5))
{
if (stat(token,&buf)==-1)
{
perror(token);
printf( "ERROR\n");
}
else
{
printf("FILE EXISTS\n");
}
}
}
return 0;
}
这是输入及其内容 returns:
/bin/ls
: No such file or directory
ERROR
免责声明:我刚刚更正了问题并添加了更多内容,以便你们更好地理解问题,不要对我尖叫。
来自fgets manual:
If a newline is read, it is stored into the buffer.
也就是说,代码当前尝试检查 "/bin/ls\n"
而不是 "/bin/ls"
。
通过首先去除尾随的换行符来修复。一种方式:
const char *delim = " \n";
fgets(input, MAX, stdin);
const char *token = strtok(input, delim);