Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在我的C程序中验证四个终端当前是否打开?_C_Linux - Fatal编程技术网

如何在我的C程序中验证四个终端当前是否打开?

如何在我的C程序中验证四个终端当前是否打开?,c,linux,C,Linux,所以我要在开始之前说,这是我班上的一个家庭作业项目。我应该在运行程序之前确定用户打开了四个终端窗口,我必须通过确定是否可以从/dev/pts/以只读方式打开四个终端号缓冲区来完成这一任务。然后我必须保存前四个缓冲区,以便再次打开它们写入终端。我知道如何使用fopen打开文件,但我的问题是,即使不再打开的终端也会显示出来,并且可以访问。我知道要求家庭作业帮助是很不愉快的,但我已经为此工作了几个小时,我不想让它为我写,我只想知道一些方向。如何使用我必须使用的方法检查是否有四个端子打开?这是我的代码,

所以我要在开始之前说,这是我班上的一个家庭作业项目。我应该在运行程序之前确定用户打开了四个终端窗口,我必须通过确定是否可以从/dev/pts/以只读方式打开四个终端号缓冲区来完成这一任务。然后我必须保存前四个缓冲区,以便再次打开它们写入终端。我知道如何使用fopen打开文件,但我的问题是,即使不再打开的终端也会显示出来,并且可以访问。我知道要求家庭作业帮助是很不愉快的,但我已经为此工作了几个小时,我不想让它为我写,我只想知道一些方向。如何使用我必须使用的方法检查是否有四个端子打开?这是我的代码,也许你们中的一个可以看到我做错了什么

#include <stdio.h>
#include <stdlib.h>

#define MAXLINE 100

int main(){
    int i, ptsNum[4], ptsCount = 0;
    FILE *fp;
    char ptsName[20];

    for(i = 0; i < 20; i++){
        // Append the terminal number to the end of the buffer name
        sprintf(ptsName, "/dev/pts/%d", i);
        // Try to open the file
        if((fp = fopen(ptsName, "r")) != NULL){
            // Save the terminal number if the buffer exists
            ptsNum[ptsCount] = i;
            ptsCount++;
            fclose(fp);
        }
    }

return 0;
}
#包括
#包括
#定义MAXLINE 100
int main(){
int i,ptsNum[4],ptscont=0;
文件*fp;
char-ptsName[20];
对于(i=0;i<20;i++){
//将终端号追加到缓冲区名称的末尾
sprintf(ptsName,“/dev/pts/%d”,i);
//尝试打开该文件
如果((fp=fopen(ptsName,“r”)!=NULL){
//如果缓冲区存在,则保存终端号
ptsNum[ptscont]=i;
ptscont++;
fclose(fp);
}
}
返回0;
}

好吧,你试着打开终端,但是一旦你数到它们,你就会丢失它们,所以如果你想打开它们,不要在循环结束时做最后一个
fclose(3)

好吧,你试着打开终端,但是一旦你数到它们,你就会丢失它们,所以如果你想打开它们,不要在循环结束时做最后一个
fclose(3)

你没有问任何问题。我想您需要在这里为
/dev/pts
目录设置
inotify
。是的,很抱歉,我不太清楚。当我运行上面的代码时,它会存储已打开但不再存在的终端的编号。你会用那个命令发布我的问题的帮助吗?@Henry--请编辑你的问题,而不是添加评论。阅读或只是键入
man inotify
,所以我只是将
改为(I=0;I<20;I++){
改为
for(I=1;I<20;I++){
在运行了gdb之后,我的代码似乎终于起作用了,我不是一个聪明人。你没有问任何问题。我想你需要在这里为
/dev/pts
目录设置
inotify
。是的,很抱歉,我不是很清楚。当我运行上面的代码时,它会存储已打开但不再使用的终端的号码。你会用这个命令发布我的问题的帮助吗?@Henry——请编辑你的问题,而不是添加注释。阅读或只是键入
man inotify
,所以我只是将(I=0;I<20;I++){改为
for(I=1;I<20;I++){
,在运行了gdb之后,我的代码似乎终于起作用了,我不是一个聪明人。